vb 2010问题

 收藏

我有一个列表视图和一个组合框。我需要将列表视图中的所有列标题显示为组合框上的项目。我还需要根据组合框上的选定项目对列表视图的数据进行“排序”。

例如:我的列表视图包含列标题,“名称”,“地址”,“年龄”,“日期” 我的下拉菜单是我的组合框,我需要输入姓名,地址和年龄作为我的选项 接下来,我需要对其进行排序。如果我在组合框上选择“名称”,则列表视图应显示以升序或降序排序的名称列标题

我该怎么做?需要认真的帮助。我在任何地方都找不到答案。 :(

回复
  • ased 回复

    您可以通过以下方式将listview列添加到组合框中:

       For i = 0 To ListView1.Columns.Count - 1
                ComboBox1.Items.Add(ListView1.Columns(i).Text)
            Next
    

  • 米唐 回复

    为了在单击时对列进行排序,必须为该列创建一个排序类。排序类必须定义为实现IComparer接口。这是必需的,因为实际的排序代码(您不必编写)不知道如何对所有给定类型的数据进行排序。您将要编写的排序类将仅包含一个方法。该方法必须命名为“比较”。此方法将采用Object类型的两个参数。 Compare方法会将参数强制转换为ListViewItem,然后根据要编写的比较返回值-1、0或1。需要注意的几件事:

    x和y(Compare方法中生成的参数)是列表视图行。您的自定义类必须对特定SubItem进行比较。

    如果item1是 item2,则返回+1

    特定类别不必限于一列。例如,您可以对自定义排序进行编码,以便对第一列进行排序,首先在第一列上,然后在第二列上。

    以下代码在详细信息视图模式下需要一个具有三列的列表视图。运行时,它将使用一些随机数填充listview。单击第一列标题以根据第一列中的数值对行进行排序。单击第二列标题,以根据第二列中的字符串值对行进行排序。单击第三列标题以根据第三列中的数字总和对行进行排序。

    Public Class Form1
    
        Dim rnd As New System.Random
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    
            'populate a three column listview with some random numbers
    
            For i As Integer = 1 To 5
    
                Dim item As New ListViewItem
                item.Text = rnd.Next(1000)
    
                For j As Integer = 1 To 2
                    item.SubItems.Add(rnd.Next(1000))
                Next
    
                ListView1.Items.Add(item)
    
            Next
    
    
        End Sub
    
        Private Sub ListView1_ColumnClick(sender As System.Object, e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
    
            'sort ascending on the clicked column
    
            Select Case e.Column
                Case 0
                    ListView1.ListViewItemSorter = New FirstSorter
                Case 1
                    ListView1.ListViewItemSorter = New SecondSorter
                Case 2
                    ListView1.ListViewItemSorter = New ThirdSorter
            End Select
    
            ListView1.Sorting = SortOrder.Ascending
    
        End Sub
    
        Class FirstSorter
    
            'sorts on the first column based on the numeric value
    
            Implements IComparer
    
            Public Function Compare(x As Object, y As Object) As Integer Implements System.Collections.IComparer.Compare
    
                Dim item1 As ListViewItem = x
                Dim item2 As ListViewItem = y
    
                Return Math.Sign(CInt(item1.SubItems(0).Text) - CInt(item2.SubItems(0).Text))
    
            End Function
    
        End Class
    
        Class SecondSorter
    
            'sorts on the second column based on the string value
    
            Implements IComparer
    
            Public Function Compare(x As Object, y As Object) As Integer Implements System.Collections.IComparer.Compare
    
                Dim item1 As ListViewItem = x
                Dim item2 As ListViewItem = y
    
                Return StrComp(item1.SubItems(1).Text, item2.SubItems(1).Text)
    
            End Function
    
        End Class
    
        Class ThirdSorter
    
            'sorts on the third column based on the sum of all digits
    
            Implements IComparer
    
            Public Function Compare(x As Object, y As Object) As Integer Implements System.Collections.IComparer.Compare
    
                Dim item1 As ListViewItem = x
                Dim item2 As ListViewItem = y
    
                Dim sum1 As Integer = 0
                Dim sum2 As Integer = 0
    
                For Each ch As Char In item1.SubItems(2).Text.ToCharArray
                    sum1 += Val(ch)
                Next
    
                For Each ch As Char In item2.SubItems(2).Text.ToCharArray
                    sum2 += Val(ch)
                Next
    
                Return Math.Sign(sum1 - sum2)
    
            End Function
    
        End Class
    
    End Class
    

    要将列标题复制到组合框,您可以执行

    For Each hdr As ColumnHeader In ListView1.Columns
        ComboBox1.Items.Add(hdr.Text)
    Next    
    

  • lest 回复

    and in this page you can see how to sort listview items by a specefic column:
    http://msdn.microsoft.com/en-us/kb/kbarticle.aspx?id=319399

    请注意,您应该将第9步

    ComboBox1_SelectedIndexChanged
    

    事件 就这样 ;)