【发布时间】:2016-03-13 20:52:31
【问题描述】:
我遇到了一个非常大的问题(对我来说)。我找不到任何解决方案。我的 ListView 中有四列:
ID = integer
Name = string
Response = boolean
Memory = mixed integer with string (1'000 KB)
在 [ColumnClick] 之后,我可以“正常”对前 3 列进行排序(asc/desc),但是当我尝试对第四列进行排序时,而不是
1 KB / 5 KB / 1'000 KB
我确实收到了这样的东西:
1 KB / 1'000 KB / 5 KB
第四列是这样打印的:
ListView1.Items(Count).SubItems.Add(FormatNumber(pMem, 0) & " KB")
我在想这个:
If e.Column.ToString = 3 Then
Dim final As Integer
For Each value In ListView1.Items
Replace(value.SubItems(3), "'", "")
Replace(value.SubItems(3), " KB", "")
final = value
Next
Else
...
然后以与 ID 相同的方式对整数进行排序,然后以某种方式将它们放回 ListView。但我不知道怎么做。
表格中的排序:
Private Sub ListView1_ColumnClick(sender As Object, e As ColumnClickEventArgs) Handles ListView1.ColumnClick
Dim ListViewSorter As New ListViewSorter
With ListViewSorter
.SortingOrder = 1
.ColumnIndex = e.Column
End With
ListView1.ListViewItemSorter = ListViewSorter
End Sub
还有我的 ListViewSorter.vb
Public Class ListViewSorter
Implements IComparer
Private ColumnId As Integer
Private SortOrder As SortOrder
Private ItemComparer As CaseInsensitiveComparer
Public Sub New()
ColumnId = 0
SortOrder = 0
ItemComparer = New CaseInsensitiveComparer()
End Sub
Public Property ColumnIndex() As Integer
Get
Return ColumnId
End Get
Set(Value As Integer)
ColumnId = Value
End Set
End Property
Public Property SortingOrder() As SortOrder
Get
Return SortOrder
End Get
Set(Value As SortOrder)
SortOrder = Value
End Set
End Property
Public Function Compare(x As Object, y As Object) As Integer Implements IComparer.Compare
Dim myResults As Integer
Dim strX As String = DirectCast(x, ListViewItem).SubItems(ColumnId).Text
Dim strY As String = DirectCast(y, ListViewItem).SubItems(ColumnId).Text
Dim num As Point
If Integer.TryParse(strX, num.X) And Integer.TryParse(strY, num.Y) Then
myResults = ItemComparer.Compare(num.X, num.Y)
Else
myResults = ItemComparer.Compare(strX, strY)
End If
If SortOrder = 1 Then
Return myResults
ElseIf SortOrder = 2 Then
Return -myResults
Else
Return 0
End If
End Function
End Class
【问题讨论】:
-
请展示您如何“正常”对列 1-3 进行排序。单独的 LV 只对 Item 进行排序(col 0)
标签: .net vb.net sorting listview