Langkah - Langkah Membuat Custom Control Listview Sorting Data dengan Kolom Header Klik.
Custom control ini dibuat untuk menambahkan fungsi sorting data ketika kolom header dari Listview di klik. dengan membuat custom control ini, disetiap form yang menggunakan Listview kita tidak usah menuliskan sebaris script pun untuk melakukan sorting data.
Data dalam objek Listview akan diurutkan otomatis ketika Column Header diklik.
Data dalam objek Listview akan diurutkan otomatis ketika Column Header diklik.
Bahan - Bahan yang digunakan :
IDE : Visual Studio 2013 (dibawah ini juga bisa)
Framework : .NET 4.5
Sample dll : download (dibatasi 2 kolom, dan ada message box)
Membuat Project Library.
setelah berhasil membuat Projectnya kita akan membuat 1 buah Custom Control dengan nama "JListView"dan 1 buah Class dengan nama "JListviewSorter"
Custom Control "JListView"
Class " JListviewSorter"
dan di Solution Explorer akan seperti ini :
Saatnya Meracik.
Class JListviewSorter
Yang pertama kali kita buat adalah method pembanding yang kita taro di class " JListviewSorter "
1. Buka Class "JListviewSorter"
2. Import namespace System.Windows.Form
Imports System.Windows.Forms
3. Implement Interface IComparer , Interface ini menyediakan cara untuk menyesuaikan urutan dari koleksi. tambahkan juga variable lokal untuk menampuk kolom dan order
4. Membuat default method new
5. Membuat method new dengan parameter kolom dan order
6. Mengisi Public Function Compare, Function ini otomatis terbuat kekita kita implement IComparer.
7. JListviewSorter Selesai.
'implementasi interface IComparer 'penjelasan Implement https://msdn.microsoft.com/en-us/library/7z6hzchx.aspx 'penjelasan IComparer https://msdn.microsoft.com/en-us/library/system.collections.icomparer(v=vs.110).aspx Implements IComparer 'variable kolom yang ingin dilakukan sorting Private col As Integer 'variable order, untuk menentukan sorting order Ascending (A-Z) atau Descending (Z-A) Private order As SortOrder
4. Membuat default method new
Public Sub New() col = 0 order = SortOrder.Ascending End Sub
5. Membuat method new dengan parameter kolom dan order
Public Sub New(ByVal column As Integer, ByVal order As SortOrder) col = column Me.order = order End Sub
6. Mengisi Public Function Compare, Function ini otomatis terbuat kekita kita implement IComparer.
Public Function Compare(x As Object, y As Object) As Integer Implements IComparer.Compare Dim returnval As Integer = 0 'listviewX dan listviewY adalah variable yang menampung data yang ingin dibandingkan. Dim listviewX, listviewY As ListViewItem listviewX = x listviewY = y 'variable yang digunakan untuk pengecekan tipe data yang ingin diurutkan Dim tanggal As DateTime Dim angka As Double 'pengecekan atau validasi data string yang ingin dibandingkan, apakah data yang ingin di bandingkan tipe datanya adalah datetime 'dengan mengkonversi string menjadi datetime 'referensi : https://msdn.microsoft.com/en-us/library/ch92fbc1(v=vs.110).aspx If DateTime.TryParse(listviewX.SubItems(col).Text, tanggal) And DateTime.TryParse(listviewY.SubItems(col).Text, tanggal) Then 'konvert string data yang ingin di bandingkan menjadi tipedata datetime 'referensi : https://msdn.microsoft.com/en-us/library/system.datetime.parse(v=vs.110).aspx Dim firstdate As DateTime = DateTime.Parse(listviewX.SubItems(col).Text) Dim seconddate As DateTime = DateTime.Parse(listviewY.SubItems(col).Text) 'membandingkan 2 buat data dengan tipedata datetime, apakah firstdate = atau > atau < seconddate 'referensi : https://msdn.microsoft.com/en-us/library/system.datetime.compare(v=vs.110).aspx returnval = DateTime.Compare(firstdate, seconddate) ElseIf Double.TryParse(listviewX.SubItems(col).Text, angka) And Double.TryParse(listviewY.SubItems(col).Text, angka) Then 'konvert string data yang ingin di bandingkan menjadi tipedata double 'referensi : https://msdn.microsoft.com/en-us/library/t9ebt447(v=vs.110).aspx Dim num1 As Double = Double.Parse(listviewX.SubItems(col).Text) Dim num2 As Double = Double.Parse(listviewY.SubItems(col).Text) 'membandingkan 2 buat data dengan tipedata double, apakah num1 = atau > atau < num2 'referensi : https://msdn.microsoft.com/en-us/library/fyxd1d26(v=vs.110).aspx returnval = num1.CompareTo(num2) Else 'membandingkan 2 buat data dengan tipedata string (mengabaikan case sensitif)dan menentukan posisi dalam urutan 'returnval = [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text) 'referensi :https://msdn.microsoft.com/en-us/library/zkcaxw5y(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-5 returnval = String.Compare(listviewX.SubItems(col).Text, listviewY.SubItems(col).Text) End If If order = SortOrder.Descending Then returnval *= -1 End If Return returnval End Function
7. JListviewSorter Selesai.
Custom Control JListView.
1.Buka Custom Control "JListView"
2.Import namespace yang diperlukan.
Imports System.Windows.Forms Imports JListview.JListviewSorter Imports System.Collections.Generic
3. Inherits System.Windows.Form.Listview dan local integer variable.
4. Sub OnPain dibiarkan saja jangan diotak-atik. kenapa ? biar keliatan banyak aja.
5. Tambahkan perintah2 di event OnColumnClick
6. Selesai.
Inherits System.Windows.Forms.ListView Private Col As Integer = -1
4. Sub OnPain dibiarkan saja jangan diotak-atik. kenapa ? biar keliatan banyak aja.
5. Tambahkan perintah2 di event OnColumnClick
Protected Overrides Sub OnColumnClick(e As ColumnClickEventArgs) MyBase.OnColumnClick(e) Dim coltmp As String = e.Column.ToString If e.Column <> Col Then Col = e.Column Me.Sorting = SortOrder.Ascending Else If Me.Sorting = SortOrder.Ascending Then Me.Sorting = SortOrder.Descending Else Me.Sorting = SortOrder.Ascending End If End If 'referensi : https://msdn.microsoft.com/en-us/library/system.windows.forms.listview.listviewitemsorter(v=vs.110).aspx Me.ListViewItemSorter = New JListviewSorter(e.Column, Me.Sorting) Me.Sort() End Sub
6. Selesai.
Build Library.
Test.
1. Buat Project baru didalam Solution yang sama.
Custom Control yang kita buat sudah ada di Toolbox. karena project testnya 1 solution.
and RUN ........
sekian dulu berbaginya, jangan lupa like, komen, share.
jangan lupa sertakan link blog ini sebagai sumber kalo kalian mau paste tutorial ini di blog kalian.
Selamat Mencoba.
jangan lupa sertakan link blog ini sebagai sumber kalo kalian mau paste tutorial ini di blog kalian.
Selamat Mencoba.
Sortirnya bisa berapa kali yah? Maksud saya berapa kolom? Kalau lebih dari satu kolom , IComparer gak akurat. Jadi mendingan gunakan IEnumerable(Of).
ReplyDelete1x aja om
ReplyDelete