Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 单击标题时如何对Listview列进行排序_Vb.net_Listview_Sorting - Fatal编程技术网

Vb.net 单击标题时如何对Listview列进行排序

Vb.net 单击标题时如何对Listview列进行排序,vb.net,listview,sorting,Vb.net,Listview,Sorting,我正在写一个家庭作业计划,我有一个ListView元素 我正在寻找一个代码片段,它允许我在单击列标题时按字母顺序排列列。如果已按升序排序,则切换到降序,反之亦然,然后按默认/第一个排序,即下面屏幕截图中的“状态” 我在谷歌上搜索了一下,没有找到任何有用的东西,你能帮我吗 Private Sub ColumnClick(ByVal sender As Object, _ ByVal e As System.Windows.Forms.ColumnClickEventArgs) _

我正在写一个家庭作业计划,我有一个ListView元素

我正在寻找一个代码片段,它允许我在单击列标题时按字母顺序排列列。如果已按升序排序,则切换到降序,反之亦然,然后按默认/第一个排序,即下面屏幕截图中的“状态”

我在谷歌上搜索了一下,没有找到任何有用的东西,你能帮我吗

Private Sub ColumnClick(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.ColumnClickEventArgs) _
    Handles lvKalender.ColumnClick

    Select Case e.Column
        ' Nach Namen sortieren
        Case 0
            If lvKalender.Columns.Item(0).ListView.Sorting <> SortOrder.Descending Then
                lvKalender.Columns.Item(0).ListView.Sorting = SortOrder.Descending
            ElseIf lvKalender.Columns.Item(0).ListView.Sorting <> SortOrder.Ascending Then
                lvKalender.Columns.Item(0).ListView.Sorting = SortOrder.Ascending
            End If
        Case 1
            If (1).ListView.Sorting <> SortOrder.Descending Then
                lvKalender.Columns.Item(1).ListView.Sorting = SortOrder.Descending
            ElseIf lvKalender.Columns.Item(1).ListView.Sorting <> SortOrder.Ascending Then
                lvKalender.Columns.Item(1).ListView.Sorting = SortOrder.Ascending
            End If
        Case 2
            If lvKalender.Columns.Item(2).ListView.Sorting <> SortOrder.Descending Then
                lvKalender.Columns.Item(2).ListView.Sorting = SortOrder.Descending
            ElseIf lvKalender.Columns.Item(2).ListView.Sorting <> SortOrder.Ascending Then
                lvKalender.Columns.Item(2).ListView.Sorting = SortOrder.Ascending
            End If
        Case 3
            If lvKalender.Columns.Item(3).ListView.Sorting <> SortOrder.Descending Then
                lvKalender.Columns.Item(3).ListView.Sorting = SortOrder.Descending
            ElseIf lvKalender.Columns.Item(3).ListView.Sorting <> SortOrder.Ascending Then
                lvKalender.Columns.Item(3).ListView.Sorting = SortOrder.Ascending
            End If
        Case 4
            If lvKalender.Columns.Item(4).ListView.Sorting <> SortOrder.Descending Then
                lvKalender.Columns.Item(4).ListView.Sorting = SortOrder.Descending
            ElseIf lvKalender.Columns.Item(4).ListView.Sorting <> SortOrder.Ascending Then
                lvKalender.Columns.Item(4).ListView.Sorting = SortOrder.Ascending
            End If
        Case 5
            If lvKalender.Columns.Item(5).ListView.Sorting <> SortOrder.Descending Then
                lvKalender.Columns.Item(5).ListView.Sorting = SortOrder.Descending
            ElseIf lvKalender.Columns.Item(5).ListView.Sorting <> SortOrder.Ascending Then
                lvKalender.Columns.Item(5).ListView.Sorting = SortOrder.Ascending
            End If
        Case 6
            If lvKalender.Columns.Item(6).ListView.Sorting <> SortOrder.Descending Then
                lvKalender.Columns.Item(6).ListView.Sorting = SortOrder.Descending
            ElseIf lvKalender.Columns.Item(6).ListView.Sorting <> SortOrder.Ascending Then
                lvKalender.Columns.Item(6).ListView.Sorting = SortOrder.Ascending
            End If
    End Select

End Sub

Private子列单击(ByVal sender作为对象_
ByVal e作为System.Windows.Forms.ColumnClickEventArgs)_
处理lvKalender.column单击
选择案例e.列
“Nach Namen sortieren
案例0
如果lvKalender.Columns.Item(0.ListView.SortingSortOrder.Descending,则
lvKalender.Columns.Item(0.ListView.Sorting=SortOrder.Descending
ElseIf lvKalender.Columns.Item(0).ListView.Sorting SortOrder
lvKalender.Columns.Item(0).ListView.Sorting=SortOrder.升序
如果结束
案例1
如果(1).ListView.Sorting SortOrder.Descending,则
lvKalender.Columns.Item(1).ListView.Sorting=SortOrder.Descending
ElseIf lvKalender.Columns.Item(1).ListView.Sorting SortOrder.升序
lvKalender.Columns.Item(1).ListView.Sorting=SortOrder.升序
如果结束
案例2
如果是lvKalender.Columns.Item(2).ListView.Sorting SortOrder.Descending,则
lvKalender.Columns.Item(2).ListView.Sorting=SortOrder.Descending
ElseIf lvKalender.Columns.Item(2).ListView.Sorting SortOrder.然后升序
lvKalender.Columns.Item(2).ListView.Sorting=SortOrder.升序
如果结束
案例3
如果是lvKalender.Columns.Item(3).ListView.Sorting SortOrder.Descending,则
lvKalender.Columns.Item(3).ListView.Sorting=SortOrder.Descending
ElseIf lvKalender.Columns.Item(3).ListView.Sorting SortOrder.然后升序
lvKalender.Columns.Item(3).ListView.Sorting=SortOrder.升序
如果结束
案例4
如果是lvKalender.Columns.Item(4).ListView.Sorting SortOrder.Descending,则
lvKalender.Columns.Item(4).ListView.Sorting=SortOrder.Descending
ElseIf lvKalender.Columns.Item(4).ListView.Sorting SortOrder.然后升序
lvKalender.Columns.Item(4).ListView.Sorting=SortOrder.升序
如果结束
案例5
如果lvKalender.Columns.Item(5).ListView.Sorting SortOrder.Descending
lvKalender.Columns.Item(5).ListView.Sorting=SortOrder.Descending
ElseIf lvKalender.Columns.Item(5).ListView.Sorting SortOrder.然后升序
lvKalender.Columns.Item(5).ListView.Sorting=SortOrder.升序
如果结束
案例6
如果是lvKalender.Columns.Item(6).ListView.Sorting SortOrder.Descending,则
lvKalender.Columns.Item(6).ListView.Sorting=SortOrder.Descending
ElseIf lvKalender.Columns.Item(6).ListView.Sorting SortOrder.然后升序
lvKalender.Columns.Item(6).ListView.Sorting=SortOrder.升序
如果结束
结束选择
端接头

如果我了解您的问题,您希望在
列表视图中对日期列(可能还有一些值?)进行排序。问题是
列表视图中的所有内容都是字符串/文本。有些子项(COL)可能看起来像日期,但那只是因为你的大脑就是这样翻译/解释它们的——它们实际上是字符串

这样做的影响是,对包含数字的文本进行排序很少奏效。例如,
“90”
的排序总是高于
“300”
,因为
“9”
“3”
“19.08.2014”
的排序总是高于
“10.01.2019”
。数字和数字的值不一样

要按文本以外的内容进行排序,您需要一个
ListViewItemSorter
。这是日期:

Friend Class ListViewItemDateComparer
    Implements IComparer
    Private col As Integer
    Private _sort As SortOrder = SortOrder.Ascending

    Public Sub New(column As Integer, sort As Windows.Forms.SortOrder)
        col = column
        _sort = sort
    End Sub

    Public Function Compare(x As Object,
                 y As Object) As Integer Implements System.Collections.IComparer.Compare
        Dim returnVal As Integer = -1

        ' parse LV contents back to DateTime value
        Dim dtX As DateTime = DateTime.Parse(CType(x, ListViewItem).SubItems(col).Text)
        Dim dtY As DateTime = DateTime.Parse(CType(y, ListViewItem).SubItems(col).Text)

        ' compare
        returnVal = DateTime.Compare(dtX, dtY)

        If _sort = SortOrder.Descending Then
            returnVal *= -1
        End If
        Return returnVal

    End Function
End Class
要使用它:

Dim LVSorter = New ListViewItemDateComparer(COL_TO_SORT, Sort_Order)
myLV.ListViewItemSorter = LVSorter
COL\u TO\u SORT
是您希望对包含日期的列/子项索引进行排序

Sort\u Order
将是标准的WinForms排序器(
SortOrder.Ascending
etc)


要比较其他数据类型,
Decimal
例如,克隆
比较器
并更改进行比较的3行:

' parse LV contents back to Decimal value
Dim dtX As Decimal = Decimal.Parse(CType(x, ListViewItem).SubItems(col).Text)
Dim dtY As Decimal = Decimal.Parse(CType(y, ListViewItem).SubItems(col).Text)

' compare
returnVal = Decimal.Compare(dtX, dtY)
Private子列单击(ByVal sender作为对象_
ByVal e作为System.Windows.Forms.ColumnClickEventArgs)_
处理lvKalender.column单击
如果lvKalender.Columns.Item(e.Column.ListView.Sorting SortOrder.Descending,则
lvKalender.Columns.Item(e.Column.ListView.Sorting=SortOrder.Descending
ElseIf lvKalender.Columns.Item(e.Column.ListView.SortingSortOrder.升序
lvKalender.Columns.Item(e.Column.ListView.Sorting=SortOrder.升序
如果结束
端接头
私有子ListViewProcess\u ColumnClick(发送者作为对象,e作为ColumnClickEventArgs)处理ListViewProcess.ColumnClick
sender.AutoResizeColumn(例如Column、ColumnHeaderAutoResizeStyle.HeaderSize)
如果sender.Columns.Item(e.Column.ListView.SortingSortOrder.Descending,则
sender.Columns.Item(e.Column).ListView.Sorting=SortOrder.Descending
ElseIf sender.Columns.Item(e.Column.ListView.Sorting SortOrder.Ascending然后
sender.Columns.Item(e.Column).ListView.Sorting=SortOrder.升序
如果结束
端接头

您可能想用英语翻译Thatbite schreiben Sie!:)首先对不起,蒂姆,我已经用谷歌翻译工具翻译了,让我猜猜。您想根据列表视图列的内容(日期、数字、字符串)对其进行排序吗?不,一小时一次都是字符串=stude是整数日期是字符串,因为我在mysql中编写了日期
Private Sub ColumnClick(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.ColumnClickEventArgs) _
    Handles lvKalender.ColumnClick

 If lvKalender.Columns.Item(e.Column).ListView.Sorting <> SortOrder.Descending Then
     lvKalender.Columns.Item(e.Column).ListView.Sorting = SortOrder.Descending
  ElseIf lvKalender.Columns.Item(e.Column).ListView.Sorting <> SortOrder.Ascending Then
     lvKalender.Columns.Item(e.Column).ListView.Sorting = SortOrder.Ascending
 End If

End Sub
Private Sub ListViewProcess_ColumnClick(sender As Object, e As ColumnClickEventArgs) Handles ListViewProcess.ColumnClick
    sender.AutoResizeColumn(e.Column, ColumnHeaderAutoResizeStyle.HeaderSize)
    If sender.Columns.Item(e.Column).ListView.Sorting <> SortOrder.Descending Then
        sender.Columns.Item(e.Column).ListView.Sorting = SortOrder.Descending
    ElseIf sender.Columns.Item(e.Column).ListView.Sorting <> SortOrder.Ascending Then
        sender.Columns.Item(e.Column).ListView.Sorting = SortOrder.Ascending
    End If
End Sub