【问题标题】:Click column header单击列标题
【发布时间】:2014-02-05 03:29:31
【问题描述】:

我想按时间或付款或名称订购listview 中的项目,我现在使用combobox,但我想在单击标题列时从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

【问题讨论】:

标签: vb.net winforms listview


【解决方案1】:

解释得更好,使用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 

【讨论】:

  • 我的代码有问题,“ColumnIndex”中的错误 --> : ColumnIndex not member of 'system.windows.form.ColumnClickEventArgs'
  • 我刚刚将 Property 的名称更正为 Column 而不是 ColumnIndex。
  • 嘿@Nizam 我不能使用这个代码,我怎么知道我选择它的列并对数据进行排序,我使用这个语句进行排序,从 std 中选择 * 按时间排序,或按名称订购等,请帮助我,我需要这个来工作,非常感谢
  • 好的,属性 Column 为您提供了从零开始单击的 Column 的数量。第一列为零,一并继续。在知道点击的列后,您可以使用您的代码对数据进行排序。
  • 在我的回答中,变量 col 表示点击的列数,变量 ColumnName 引用点击的列的标题。
【解决方案2】:

我遇到了同样的问题,我在 C# 中找到了一个 Microsoft 教程,并在不久前转换为 VB.NET。

您可以查看我转换后的开源项目:http://www.sourcecodester.com/visual-basic-net/5415/how-sort-listview-control-column-header-vbnet.html

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

【讨论】:

  • 谢谢@nimblebit 这正是我想要的,但我不能使用代码,你能把我的代码放在你的代码里吗,它对我不起作用:(非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 2012-08-06
  • 2015-12-17
  • 1970-01-01
相关资源
最近更新 更多