Utilizzo la seguente classe per ordinare gli elementi di una ListView:
Ho una variabile globale della Form:codice:Public Class ListViewColumnSorter Implements System.Collections.IComparer Private ColumnToSort As Integer Private OrderOfSort As SortOrder Private ObjectCompare As CaseInsensitiveComparer Public Sub New() ' Initialize the column to '0'. ColumnToSort = 1 ' Initialize the sort order to 'none'. OrderOfSort = SortOrder.None ' Initialize the CaseInsensitiveComparer object. ObjectCompare = New CaseInsensitiveComparer End Sub Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare Dim compareResult As Integer Dim listviewX As ListViewItem Dim listviewY As ListViewItem ' Cast the objects to be compared to ListViewItem objects. listviewX = CType(x, ListViewItem) listviewY = CType(y, ListViewItem) ' Compare the two items. compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text) ' Calculate the correct return value based on the object ' comparison. If (OrderOfSort = SortOrder.Ascending) Then ' Ascending sort is selected, return typical result of ' compare operation. Return compareResult ElseIf (OrderOfSort = SortOrder.Descending) Then ' Descending sort is selected, return negative result of ' compare operation. Return (-compareResult) Else ' Return '0' to indicate that they are equal. Return 0 End If End Function Public Property SortColumn() As Integer Set(ByVal Value As Integer) ColumnToSort = Value End Set Get Return ColumnToSort End Get End Property Public Property Order() As SortOrder Set(ByVal Value As SortOrder) OrderOfSort = Value End Set Get Return OrderOfSort End Get End Property End Class
e nel click di un Button ho messo:codice:Private lvwColumnSorter As ListViewColumnSorter
Al primo click la listview viene popolata e se clicco sulla colonna viene ordinata correttamente, ma se clicco una seconda volta sul bottone viene generato un errore:codice:lvwColumnSorter = New ListViewColumnSorter Me.ListView1.ListViewItemSorter = lvwColumnSorter ListView4.Items.Clear() For i As Integer = 0 To 20 ListView4.Items.Add("") If CStr(i).Length = 1 Then ListView4.Items(i).SubItems.Add("0" & i) Else ListView4.Items(i).SubItems.Add(i) End If Next
sulla riga della classe:codice:InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index
codice:compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)![]()

Rispondi quotando