在VB.NET中,可以通过添加事件处理程序来实现ListView控件点击列头进行排序的功能。以下是一个简单的示例代码:
Public Class Form1
Private currentSort As SortOrder = SortOrder.None
Private currentColumn As Integer = -1
Private Sub ListView1_ColumnClick(sender As Object, e As ColumnClickEventArgs) Handles ListView1.ColumnClick
' 如果点击的是同一列,则反转排序方式
If e.Column = currentColumn Then
If currentSort = SortOrder.Ascending Then
currentSort = SortOrder.Descending
Else
currentSort = SortOrder.Ascending
End If
Else
' 如果点击的不是同一列,则默认排序方式为升序
currentSort = SortOrder.Ascending
' 记录新的列索引
currentColumn = e.Column
End If
' 使用自定义的比较器进行排序
ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, currentSort)
' 进行排序
ListView1.Sort()
End Sub
End Class
' 自定义的比较器类
Public Class ListViewItemComparer
Implements IComparer
Private col As Integer
Private sortOrder As SortOrder
Public Sub New( ByVal column As Integer, ByVal sortOrder As SortOrder)
col = column
Me.sortOrder = sortOrder
End Sub
Public Function Compare(x As Object, y As Object) As Integer Implements IComparer.Compare
Dim returnVal As Integer = -1
Dim item1 As ListViewItem = DirectCast(x, ListViewItem)
Dim item2 As ListViewItem = DirectCast(y, ListViewItem)
If sortOrder = SortOrder.Ascending Then
returnVal = String.Compare(item1.SubItems(col).Text, item2.SubItems(col).Text)
ElseIf sortOrder = SortOrder.Descending Then
returnVal = String.Compare(item2.SubItems(col).Text, item1.SubItems(col).Text)
End If
Return returnVal
End Function
End Class
在上述代码中,ListView1_ColumnClick 是点击列头时触发的事件处理程序。它会根据点击的列和当前排序状态来初始化一个 ListViewItemComparer 对象,并将其设置为 ListView 的排序器,然后调用 ListView1.Sort() 方法进行排序。ListViewItemComparer 类实现了 IComparer 接口,用于比较 ListView 中的项。根据点击的列和排序方向,Compare 方法会返回相应的比较结果。

985

被折叠的 条评论
为什么被折叠?



