Hi
Hier mal eine Möglichkeit ein ListView nach Spalten zu sortieren:
Als erstes benötigen wir einen Comparer, der später die ListViewItems vergleicht:
Bei einer Neu-Generierung wird der ListViewComparer instantiiert(Im SourceCode cmpFileListViewComparer):
Bei ListViewFiles übergibt man das ListView, das sortiert werden soll.
Zum Schluss nimmt man das ListView und schreibt in das ColumnClick-Event den Code, der zum sortieren gebraucht wird:
Gruß
~blaze~
Hier mal eine Möglichkeit ein ListView nach Spalten zu sortieren:
Als erstes benötigen wir einen Comparer, der später die ListViewItems vergleicht:
VB.NET-Quellcode
- Public Class ListViewComparer
- Implements IComparer
- Private intColumn As Integer
- Private soSortOrder As SortOrder
- Private cicComparer As CaseInsensitiveComparer
- Public Sub New(ByVal ParentListView As ListView)
- intColumn = 0
- soSortOrder = SortOrder.None
- cicComparer = New CaseInsensitiveComparer()
- ParentListView.ListViewItemSorter = Me
- End Sub
- Public Property SortOrder() As SortOrder
- Get
- Return soSortOrder
- End Get
- Set(ByVal value As SortOrder)
- soSortOrder = value
- End Set
- End Property
- Public Property SortColumn() As Integer
- Get
- Return intColumn
- End Get
- Set(ByVal value As Integer)
- intColumn = value
- End Set
- End Property
- Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
- Dim compareResult As Integer
- Dim listviewX As ListViewItem, listviewY As ListViewItem
- listviewX = CType(x, ListViewItem)
- listviewY = CType(y, ListViewItem)
- compareResult = cicComparer.Compare(listviewX.SubItems(intColumn).Text, listviewY.SubItems(intColumn).Text)
- If soSortOrder = SortOrder.Ascending Then
- Return compareResult
- ElseIf soSortOrder = SortOrder.Descending Then
- Return compareResult * -1
- Else
- Return 0
- End If
- End Function
- End Class
Bei einer Neu-Generierung wird der ListViewComparer instantiiert(Im SourceCode cmpFileListViewComparer):
Bei ListViewFiles übergibt man das ListView, das sortiert werden soll.
Zum Schluss nimmt man das ListView und schreibt in das ColumnClick-Event den Code, der zum sortieren gebraucht wird:
VB.NET-Quellcode
- If e.Column = cmpFileListViewComparer.SortColumn Then
- If cmpFileListViewComparer.SortOrder = SortOrder.Ascending Then
- cmpFileListViewComparer.SortOrder = SortOrder.Descending
- Else
- cmpFileListViewComparer.SortOrder = SortOrder.Ascending
- End If
- Else
- cmpFileListViewComparer.SortOrder = SortOrder.Ascending
- End If
- cmpFileListViewComparer.SortColumn = e.Column
- ListViewFiles.Sort()
Gruß
~blaze~