오름차순/내림차순을 전환하려면 "정렬 순서"도 추적해야합니다. 비교 자 및 열 클릭 이벤트 핸들러에서.
예 :
ListViewItemComparer.vb :
Public Class ListViewItemComparer
...
Private col As Integer
Private order As SortOrder
...
Public Sub New()
col = 0
order = SortOrder.Ascending
...
Public Sub New(ByVal column As Integer, order As SortOrder)
...
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer
...
' Perform "compare": -1: s1 < s2; 0: s1=s2, 1: s1 > s2
Dim retval As Integer = -1
retval = [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
' Reverse if "descending"
If order = SortOrder.Descending Then retval *= -1
Form1.vb를
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
...
' Allow "reverse" sort
' Initial order is "NONE". As any column is clicked, the order will toggle between Ascending (first), then Descending
ReDim ColumnOrder(4)
For i As Integer = 0 To ColumnOrder.Length - 1
ColumnOrder(i) = SortOrder.Descending
Next
...
Private Sub ListView1_ColumnClick(sender As Object, e As ColumnClickEventArgs) Handles ListView1.ColumnClick
Dim ColumnHeader As System.Windows.Forms.ColumnHeader = ListView1.Columns(e.Column)
If ColumnOrder(e.Column) = SortOrder.Descending Then
ColumnOrder(e.Column) = SortOrder.Ascending
Else
ColumnOrder(e.Column) = SortOrder.Descending
End If
ListView1.Sorting = ColumnOrder(e.Column)
ListView1.Sort()
ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, ListView1.Sorting)
...
봐 여기 자세한 내용은 : MSDN: Sorting ListView Items by Column Using Windows Forms
더블 질문 ; http://stackoverflow.com/questions/1548312/sorting-a-listview-by-column – Lectere