在Winform中,如何在列表视图列中添加排序列功能?
我无法找到允许>
谢谢
您必须编写自己的实现类IComparer
。
然后,您编写一个IComparer.Compare
在该类中实现的Compare方法。
以下是我前一段时间写的一个示例,该示例按数字,日期或字符串排序,但是您可以修改此代码以供自己使用:
Public Class ListViewComparer
Implements IComparer
Private _columnNumber As Integer
Private _sortOrder As SortOrder
Public Sub New(ByVal colIndex As Integer, ByVal sortingOrder As SortOrder)
_columnNumber = colIndex
_sortOrder = sortingOrder
End Sub
' Compare the items in the appropriate column
' for objects x and y.
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim itemX As ListViewItem = DirectCast(x, ListViewItem)
Dim itemY As ListViewItem = DirectCast(y, ListViewItem)
Dim stringX As String = "", stringY As String = ""
' Get the sub-item values.
If itemX.SubItems.Count > _columnNumber Then stringX = itemX.SubItems(_columnNumber).Text
If itemY.SubItems.Count > _columnNumber Then stringY = itemY.SubItems(_columnNumber).Text
' Compare them.
If _sortOrder = SortOrder.Ascending Then
If IsNumeric(stringX) And IsNumeric(stringY) Then
Return CInt(stringX).CompareTo(CInt(stringY))
ElseIf IsDate(stringX) And IsDate(stringY) Then
Return DateTime.Parse(stringX).CompareTo(DateTime.Parse(stringY))
Else
Return String.Compare(stringX, stringY)
End If
Else
If IsNumeric(stringX) And IsNumeric(stringY) Then
Return CInt(stringY).CompareTo(CInt(stringX))
ElseIf IsDate(stringX) And IsDate(stringY) Then
Return DateTime.Parse(stringY).CompareTo(DateTime.Parse(stringX))
Else
Return String.Compare(stringY, stringX)
End If
End If
End Function
End Class
用法:
ListViewControl1.ListViewItemSorter = New ListViewComparer(2, SortOrder.Ascending)
ListViewControl1.Sort()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句