Berbagi Cerita, Catatan, Pengalaman ngoding dan Secangkir Teh Hangat.

Tuesday, January 24, 2017

Custom Control : Mengurutkan Data LIstview dengan Kolom Header Klik

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.


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


 
'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.

   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.





Share:

2 comments:

  1. Sortirnya bisa berapa kali yah? Maksud saya berapa kolom? Kalau lebih dari satu kolom , IComparer gak akurat. Jadi mendingan gunakan IEnumerable(Of).

    ReplyDelete

Powered by Blogger.

Ads 468x60px

Freelancer

Jaka Pradesa

Data Entry and Softwares

E: j.r.pradesa@gmail.com

Hire me on Freelancer.com

Social Icons