2016-04-07 4 views
0
Private Sub ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick 

    Select Case e.Column 
     ' Nach Namen sortieren 

     Case 0 
      If ListView1.Columns.Item(1).ListView.Sorting <> SortOrder.Descending Then 
       ListView1.Columns.Item(1).ListView.Sorting = SortOrder.Descending 
      ElseIf ListView1.Columns.Item(1).ListView.Sorting <> SortOrder.Ascending Then 
       ListView1.Columns.Item(1).ListView.Sorting = SortOrder.Ascending 
      End If 
     Case 1 
      If ListView1.Columns.Item(2).ListView.Sorting <> SortOrder.Descending Then 
       ListView1.Columns.Item(2).ListView.Sorting = SortOrder.Descending 
      ElseIf ListView1.Columns.Item(2).ListView.Sorting <> SortOrder.Ascending Then 
       ListView1.Columns.Item(2).ListView.Sorting = SortOrder.Ascending 
      End If 
    End Select 

End Sub 

sortieren, dass mein Code ist, auch wenn ich die Nummer (1) verwendet, die erste Spalte ist immer noch dieWie kann ich andere Spalten in meinem Listenansicht sortieren? Ich kann nur die erste Spalte

+0

https : //msdn.microsoft.com/en-us/library/ms996467.aspx – jmcilhinney

Antwort

0

Der Grund sortiert wird es immer die erste Spalte ist die Sortierung dass ListView1.Columns.Item(1).ListView bezieht sich auf "das System.Windows.Forms.ListView-Steuerelement das System.Windows.Forms.ColumnHeader befindet sich in" aus der Dokumentation. Die letzte .ListView verweist also immer auf ListView1.

See Microsoft's answer on MSDN

-Code von MSDN genommen:

Die Sortierung Handler

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    AddHandler ListView1.ColumnClick, AddressOf Me.listView1_ColumnClick 
End Sub 

Dim sortColumn As Integer = -1 

Private Sub listView1_ColumnClick(sender As Object, e As System.Windows.Forms.ColumnClickEventArgs) 
    ' Determine whether the column is the same as the last column clicked. 
    If e.Column <> sortColumn Then 
     ' Set the sort column to the new column. 
     sortColumn = e.Column 
     ' Set the sort order to ascending by default. 
     listView1.Sorting = SortOrder.Ascending 
    Else 
     ' Determine what the last sort order was and change it. 
     If listView1.Sorting = SortOrder.Ascending Then 
      listView1.Sorting = SortOrder.Descending 
     Else 
      listView1.Sorting = SortOrder.Ascending 
     End If 
    End If 
    ' Call the sort method to manually sort. 
    listView1.Sort() 
    ' Set the ListViewItemSorter property to a new ListViewItemComparer 
    ' object. 
    listView1.ListViewItemSorter = New ListViewItemComparer(e.Column, listView1.Sorting) 
End Sub 

Sie auch ein Element comparer brauchen so die Listview weiß, wie die Elemente zu sortieren

Class ListViewItemComparer 
    Implements IComparer 
    Private col As Integer 
    Private order As SortOrder 

    Public Sub New() 
     col = 0 
     order = SortOrder.Ascending 
    End Sub 

    Public Sub New(column As Integer, order As SortOrder) 
     col = column 
     Me.order = order 
    End Sub 

    Public Function Compare(x As Object, y As Object) As Integer _ 
         Implements System.Collections.IComparer.Compare 
     Dim returnVal As Integer = -1 
     returnVal = [String].Compare(CType(x, _ 
         ListViewItem).SubItems(col).Text, _ 
         CType(y, ListViewItem).SubItems(col).Text) 
     ' Determine whether the sort order is descending. 
     If order = SortOrder.Descending Then 
      ' Invert the value returned by String.Compare. 
      returnVal *= -1 
     End If 

     Return returnVal 
    End Function 
End Class 
Verwandte Themen