listview sorteren (descending) op kolom

Status
Niet open voor verdere reacties.

Kiterme

Gebruiker
Lid geworden
1 mrt 2007
Berichten
18
Voorbeeld:
kolom1 kolom2 kolom3
Row1: 100 200 300
Row2: 300 100 200
Row3: 150 350 800

Als ik nu ListView1.Sorting = SortOrder.Descending gebruik, dan komt in iedere row 300 bovenaan.

maar ik zou will dat ik sorteer op kolom , maar dat de row informatie gelijk blijft (a la excel), dus:

kolom1 kolom2 kolom3
Row1: 150 350 800
Row2: 100 200 300
Row3: 300 100 200

who can help me??
 
In form declareren
Code:
Private m_SortingColumn As ColumnHeader

lvwUrenPers even aanpassen aan de jouwe.
Code:
Private Sub lvwUrenPers_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvwUrenPers.ColumnClick
        ' Get the new sorting column.
        Dim new_sorting_column As ColumnHeader = lvwUrenPers.Columns(e.Column)

        ' Figure out the new sorting order.
        Dim sort_order As System.Windows.Forms.SortOrder
        If m_SortingColumn Is Nothing Then
            ' New column. Sort ascending.
            sort_order = SortOrder.Ascending
        Else
            ' See if this is the same column.
            If new_sorting_column.Equals(m_SortingColumn) Then
                ' Same column. Switch the sort order.
                If m_SortingColumn.Text.StartsWith("> ") Then
                    sort_order = SortOrder.Descending
                Else
                    sort_order = SortOrder.Ascending
                End If
            Else
                ' New column. Sort ascending.
                sort_order = SortOrder.Ascending
            End If

            ' Remove the old sort indicator.
            m_SortingColumn.Text = _
             m_SortingColumn.Text.Substring(2)
        End If

        ' Display the new sort order.
        m_SortingColumn = new_sorting_column
        If sort_order = SortOrder.Ascending Then
            m_SortingColumn.Text = "> " & m_SortingColumn.Text
        Else
            m_SortingColumn.Text = "< " & m_SortingColumn.Text
        End If

        ' Create a comparer.
        lvwUrenPers.ListViewItemSorter = New ListViewComparer(e.Column, sort_order)

        ' Sort.
        lvwUrenPers.Sort()
    End Sub

Vervolgens in een Class plaatsen
Code:
' Implements a comparer for ListView columns.
Class ListViewComparer
    Implements IComparer

    Private m_ColumnNumber As Integer
    Private m_SortOrder As SortOrder

    Public Sub New(ByVal column_number As Integer, ByVal _
     sort_order As SortOrder)
        m_ColumnNumber = column_number
        m_SortOrder = sort_order
    End Sub

    ' Compare the items in the appropriate column
    ' for objects x and y.
    Public Function Compare(ByVal x As Object, ByVal y As _
     Object) As Integer Implements _
     System.Collections.IComparer.Compare
        Dim item_x As ListViewItem = DirectCast(x,  _
         ListViewItem)
        Dim item_y As ListViewItem = DirectCast(y,  _
         ListViewItem)

        ' Get the sub-item values.
        Dim string_x As String
        If item_x.SubItems.Count <= m_ColumnNumber Then
            string_x = ""
        Else
            string_x = item_x.SubItems(m_ColumnNumber).Text
        End If

        Dim string_y As String
        If item_y.SubItems.Count <= m_ColumnNumber Then
            string_y = ""
        Else
            string_y = item_y.SubItems(m_ColumnNumber).Text
        End If

        ' Compare them.
        If m_SortOrder = SortOrder.Ascending Then
            If IsNumeric(string_x) And IsNumeric(string_y) _
             Then
                Return Val(string_x).CompareTo(Val(string_y))
            ElseIf IsDate(string_x) And IsDate(string_y) _
             Then
                Return DateTime.Parse(string_x).CompareTo(DateTime.Parse(string_y))
            Else
                Return String.Compare(string_x, string_y)
            End If
        Else
            If IsNumeric(string_x) And IsNumeric(string_y) _
             Then
                Return Val(string_y).CompareTo(Val(string_x))
            ElseIf IsDate(string_x) And IsDate(string_y) _
             Then
                Return DateTime.Parse(string_y).CompareTo(DateTime.Parse(string_x))
            Else
                Return String.Compare(string_y, string_x)
            End If
        End If
    End Function
End Class
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan