【问题标题】:In winform, how to add sort column functionaity into listview columns?在winform中,如何将排序列功能添加到listview列中?
【发布时间】:2014-08-25 14:46:22
【问题描述】:

在winform中,如何将排序列功能添加到listview列中?

我找不到允许列的任何属性>

谢谢

【问题讨论】:

标签: .net vb.net winforms listview sorting


【解决方案1】:

您必须编写自己的类来实现IComparer。

然后您编写一个在此类中实现IComparer.Compare 的比较方法。

下面是我前段时间写的一个例子,它按数字、日期或字符串排序,但你可以修改它以供自己使用:

Public Class ListViewComparer
    Implements IComparer

    Private _columnNumber As Integer
    Private _sortOrder As SortOrder

    Public Sub New(ByVal colIndex As Integer, ByVal sortingOrder As SortOrder)
        _columnNumber = colIndex
        _sortOrder = sortingOrder
    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 itemX As ListViewItem = DirectCast(x, ListViewItem)
        Dim itemY As ListViewItem = DirectCast(y, ListViewItem)
        Dim stringX As String = "", stringY As String = ""
        ' Get the sub-item values.

        If itemX.SubItems.Count > _columnNumber Then stringX = itemX.SubItems(_columnNumber).Text
        If itemY.SubItems.Count > _columnNumber Then stringY = itemY.SubItems(_columnNumber).Text

        ' Compare them.
        If _sortOrder = SortOrder.Ascending Then
            If IsNumeric(stringX) And IsNumeric(stringY) Then
                Return CInt(stringX).CompareTo(CInt(stringY))
            ElseIf IsDate(stringX) And IsDate(stringY) Then
                Return DateTime.Parse(stringX).CompareTo(DateTime.Parse(stringY))
            Else
                Return String.Compare(stringX, stringY)
            End If
        Else
            If IsNumeric(stringX) And IsNumeric(stringY) Then
                Return CInt(stringY).CompareTo(CInt(stringX))
            ElseIf IsDate(stringX) And IsDate(stringY) Then
                Return DateTime.Parse(stringY).CompareTo(DateTime.Parse(stringX))
            Else
                Return String.Compare(stringY, stringX)
            End If
        End If
    End Function
End Class

用法:

ListViewControl1.ListViewItemSorter = New ListViewComparer(2, SortOrder.Ascending)
ListViewControl1.Sort()

【讨论】:

  • 不行,你必须在`ListView1.ColumnClick`事件中调用排序代码并传入e.Column值
  • 好的,它的工作。但是,如何在相关点击时同时管理升序和降序。
  • 您需要跟踪当前排序的方向,并在单击同一列时将其反转。如果您单击不同的列,则将其设置回升序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多