Vb.net 单击列标题

Vb.net 单击列标题,vb.net,winforms,listview,Vb.net,Winforms,Listview,我想在listview中按时间、付款或姓名在组合框中排序,但我想在单击标题栏时从listview标题进行排序。我希望listview按其排序,我正在使用组合框的此代码。请帮助我 Private Sub OrderBy() Try Dim OB As String If ComboBox1.Text = "ID" Then OB = "ID" ElseIf ComboBox1.Text = "Name" Then

我想在listview中按时间、付款或姓名在组合框中排序,但我想在单击标题栏时从listview标题进行排序。我希望listview按其排序,我正在使用组合框的此代码。请帮助我

Private Sub OrderBy()
    Try
        Dim OB As String
        If ComboBox1.Text = "ID" Then
            OB = "ID"
        ElseIf ComboBox1.Text = "Name" Then
            OB = "StudentName"
        ElseIf ComboBox1.Text = "Payment" Then
            OB = "Payment"
        ElseIf ComboBox1.Text = "Time" Then
            OB = "LessonTime"
        ElseIf ComboBox1.Text = "Date" Then
            OB = "LessonDate"
        End If

        Dim dt As New DataTable
        Dim ds As New DataSet
        ds.Tables.Add(dt)
        Dim da As New OleDbDataAdapter("select * from Tend order by " & OB & "", con)
        da.Fill(dt)
        Dim myrow As DataRow
        For Each myrow In dt.Rows
            ListView1.Items.Add(myrow.Item(0))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(1))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(2))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(3))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(4))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(myrow.Item(5))
        Next

为了更好地解释,请使用ColumnClick事件并使用e.Column来了解被单击的列的索引

编辑:这不是最好的方法,但现在对你来说是最简单的方法

Private Sub OrderBy(Col as Integer)
Try
    Dim OB As String

    Select Case Col
       'Depending on the order of columns in your table
       Case 0
          OB = "ID"
       Case 1
          OB = "StudentName"
       Case 2
          OB  = "Payment"
       Case 3
          OB  = "LessonTime"
       Case 4
          OB  = "LessonDate"
    End Select

    Dim dt As New DataTable
    Dim ds As New DataSet
    ds.Tables.Add(dt)
    Dim da As New OleDbDataAdapter("select * from Tend order by " & OB & "", con)
    da.Fill(dt)
    ListView1.Items.Clear
    For Each myrow As DataRow In dt.Rows
        Dim item = ListView1.Items.Add(myrow.Item(0))
        item.SubItems.Add(myrow.Item(1))
        item.SubItems.Add(myrow.Item(2))
        item.SubItems.Add(myrow.Item(3))
        item.SubItems.Add(myrow.Item(4))
        item.SubItems.Add(myrow.Item(5))
    Next
End Try
End Sub

Private Sub ColumnClick(ByVal o As Object, ByVal e As ColumnClickEventArgs) Handles ListView1.ColumnClick
    OrderBy(e.Column)
End Sub 

我也遇到了同样的问题,我找到了c语言的Microsoft教程,不久前转换为VB.NET

您可以在以下网站上查看我转换的开源项目:


它显示了如何添加新项目,并将其分成列,您可以通过单击列标题对列表视图进行排序。您也可以设置默认的排序方法。

考虑使用ColumnClick事件并使用e.ColumnIndex来了解单击的列的索引。Thank@nimblebit这正是我想要的,但我不能使用代码,您可以将我的代码放在您的代码中吗?它对我不起作用:谢谢a loti我对代码有问题,ColumnIndex->中出错:ColumnIndex不是'system.windows.form.ColumnClickEventArgs'的成员我刚刚将属性名称改为Column而不是ColumnIndex.hey@Nizam我不能使用此代码,我如何知道我选择的列是谁并对数据进行排序,我正在使用此语句进行排序,按时间从标准顺序选择*,或按名称排序等,请帮助我,我需要这个工作这么糟糕,谢谢一个lotOk,属性列给你点击的列数从零开始。第一列是零,一,然后继续。知道单击的列后,可以使用代码对数据进行排序。在我的回答中,变量col表示单击的列数,变量ColumnName引用单击的列的标题。