【问题标题】:Filter a listview in vb.net在 vb.net 中过滤列表视图
【发布时间】:2015-12-11 11:57:10
【问题描述】:

目前我有一个程序可以写入ListView,其列名为:numbertime、描述。这个列表视图没有绑定任何数据,我基本上只是使用代码写入它。

我想要做的是有一个TextBox,如果用户想要查看特定的数字,即 2,当他们输入文本框时,我希望列表视图只显示数字 = 2 的数据。当文本框中没有任何内容时,我希望列表视图显示所有数据。

我在互联网上四处寻找,似乎没有找到过滤方法。它是否存在,如果存在,我将如何实现它。

感谢所有帮助。

【问题讨论】:

  • 你不能改用DataGridView吗?
  • 列表视图不做过滤。除非您使用数据源,否则 DGV 也不会
  • 我还有其他选择吗?也许是一种不同的方法。我希望用户能够轻松地一起查看所有数据。请任何人。提前谢谢你
  • A different approach maybe 具有您管理的数据源的 DGv是一种不同的方法,不是吗?
  • 虽然我建议使用DataGridViewDataSource,正如我和@Plutonix 所提到的,但我发布了一个解决方案,您可以在需要使用ListView 的情况下使用,跨度>

标签: vb.net winforms listview filter


【解决方案1】:

虽然我建议使用DataGridViewDataSource,但如果您需要使用ListView,您可以使用此解决方案。

您可以通过这种方式过滤列表视图:

  • 将成员字段定义为项目的备份存储:
  • 在表单Load 中将项目添加到列表视图后,将每个项目存储在该成员字段中
  • TextBoxButton 放在表单上并处理ButtonClick 事件并在处理程序中,首先清除ListView 的所有项目,然后从该备份存储中清除与条件匹配的每个项目.

项目备份的成员字段

Private ItemsBackup As New List(Of ListViewItem)

ListView中以Load事件的形式加载项目后填写备份

For Each item As ListViewItem In ListView1.Items
    ItemsBackup.Add(item)
Next

过滤器代码

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Me.ListView1.BeginUpdate()

    Me.ListView1.Items.Clear()
    For Each item As ListViewItem In ItemsBackup
        If (item.Text = Me.TextBox1.Text Or String.IsNullOrEmpty(Me.TextBox1.Text)) Then
            Me.ListView1.Items.Add(item)
        End If
    Next

    Me.ListView1.EndUpdate()
End Sub

您也可以将上述代码用于TextBoxTextChanged 事件。

这是一个测试数据:

For i = 1 To 30
    Dim item As New ListViewItem(i.ToString())
    item.SubItems.Add(DateTime.Now.AddHours(i))
    Me.ListView1.Items.Add(item)
Next

【讨论】:

  • 我尝试了您的方法,但是当您提到将备份添加到表单加载时,这是不可能的,因为系统收集新数据时会将项目添加到列表视图中。我可以存储的是一个图像列表,其中包含稍后要添加到列表视图中的所有图像。是否可以将图像列表添加到 itemBackup,如果可能的话,我应该在您提供的 for 循环中进行哪些更改。这样做我将显示所有信息或与图像对应的信息。谢谢
  • 有关我如何实现您的代码以及我写入列表视图的方式的信息,请参阅原始编辑的帖子。请您确定问题所在。谢谢
  • 亲爱的@Satvir,您应该在干净的状态下测试解决方案。例如,在表单加载中填写一个列表视图,然后应用我的解决方案并查看结果。
  • 你在Button1_Click里填备份的方式会导致你第二次点击按钮,后面会销毁,你会把过滤后的项目存储在备份中。
  • 另一件重要的事情,你添加的项目是空文本,所以很明显你会在搜索中遇到问题。
【解决方案2】:

如果没有大量工作,普通的 .NET ListView 无法做到这一点。因此,您可以使用 ObjectListView——一个围绕标准 .NET ListView 的开源包装器——它已经为您完成了所有工作。

它有built-in filtering(和突出显示)

【讨论】:

    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多