0
我不明白为什么这不起作用。我有一个ListView
,我希望能够按升序和降序排序。当逐行逐行通过代码时看起来一切顺利,除了lvItems.Sorting
将不等于Descending
。它在None {0}和Ascending {1}之间处于一个常量循环中。VB如何按升序和降序对ListView进行排序
这里是Form类:
Private Sub lvItems_ColumnClick(sender As Object, e As System.Windows.Forms.ColumnClickEventArgs) Handles lvItems.ColumnClick
' If current column is not the previously clicked column
' Add
If e.Column <> sortColumn Then
' Set the sort column to the new column
sortColumn = e.Column
'Default to ascending sort order
lvItems.Sorting = SortOrder.Ascending
Else
'Flip the sort order
If lvItems.Sorting = SortOrder.Ascending Then
lvItems.Sorting = SortOrder.Descending
Else
lvItems.Sorting = SortOrder.Ascending
End If
End If
'Set the ListviewItemSorter property to a new ListviewItemComparer object
Me.lvItems.ListViewItemSorter = New ListViewItemComparer(e.Column, lvItems.Sorting)
' Call the sort method to manually sort
lvItems.Sort()
End Sub
这里是ListViewItemComparer
类:
Public Class ListViewItemComparer
Implements IComparer
Private col As Integer
Private order As SortOrder
Public Sub New()
col = 0
order = SortOrder.Ascending
End Sub
Public Sub New(column As Integer, order As SortOrder)
col = column
Me.order = order
End Sub
Public Function Compare(x As Object, y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim returnVal As Integer = -1
Try
' Attempt to parse the two objects as DateTime
Dim firstDate As System.DateTime = DateTime.Parse(CType(x, ListViewItem).SubItems(col).Text)
Dim secondDate As System.DateTime = DateTime.Parse(CType(y, ListViewItem).SubItems(col).Text)
' Compare as date
returnVal = DateTime.Compare(firstDate, secondDate)
Catch ex As Exception
' If date parse failed then fall here to determine if objects are numeric
If IsNumeric(CType(x, ListViewItem).SubItems(col).Text) And
IsNumeric(CType(y, ListViewItem).SubItems(col).Text) Then
' Compare as numeric
returnVal = Val(CType(x, ListViewItem).SubItems(col).Text).CompareTo(Val(CType(y, ListViewItem).SubItems(col).Text))
Else
' If not numeric then compare as string
returnVal = [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
End If
End Try
' If order is descending then invert value
If order = SortOrder.Descending Then
returnVal *= -1
End If
Return returnVal
End Function
End Class
不管是什么数据我把我只能似乎得到升序排列。让我知道是否有必要提供更多信息。
不要设置'Sorting'和'ListViewItemSorter'。正如文档所述,第一个用于按字母顺序自动排序,第二个用于自定义排序。挑一个并使用它。 – jmcilhinney