Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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_Visual Studio 2012_Combobox_Filtering - Fatal编程技术网

在vb.net中使用组合框筛选Listview

在vb.net中使用组合框筛选Listview,vb.net,listview,visual-studio-2012,combobox,filtering,Vb.net,Listview,Visual Studio 2012,Combobox,Filtering,我想要的主要是隐藏数组,而不是重新查询。所以我有一个combobox和listbox,其中包含由适配器、dataset、datatable和绑定源完成的来自数据库的值。因此,当用户更改combobox值时,它将过滤列表。因此,假设combobox包含ID,那么列表视图将显示具有该ID的行。Onload列表视图将显示所有属性。那么,在没有重新询问的情况下,您如何做到这一点????下面是填充列表和组合框部分 这里有一个链接,但不是很有用 因此,如果我想重新查询,那么更改sql语句也是一样的

我想要的主要是隐藏数组,而不是重新查询。所以我有一个combobox和listbox,其中包含由适配器、dataset、datatable和绑定源完成的来自数据库的值。因此,当用户更改combobox值时,它将过滤列表。因此,假设combobox包含ID,那么列表视图将显示具有该ID的行。Onload列表视图将显示所有属性。那么,在没有重新询问的情况下,您如何做到这一点????下面是填充列表和组合框部分

这里有一个链接,但不是很有用

因此,如果我想重新查询,那么更改sql语句也是一样的

      strQuery =  "Select * from Table Where ID=@id"

如果我添加了一个参数,它将如何影响combobx,因为它们使用相同的查询。

您可以通过每次添加所需的项,在
SelectedIndexChanged
事件的
Listview1
中填充
。例如:

Private Sub combobox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles comboBox1.SelectedIndexChanged
    ListView1.Items.Clear()
    Dim curSelectionCombobox As String = combobox1.SelectedItem.ToString()
    For Each item As String In allItems
        If (condition) Then
            ListView1.Items.Add(item)
        End If
    Next
End Sub
使用上面的代码,您可以在
combobox1
curSelectionCombobox
)中获得当前选中的项目,并遍历从数据库检索到的所有元素,并决定(根据给定条件)应该/不应该添加哪些元素。因此,这种方法不使用任何过滤,而是在每次选择
combobox1
更改时从头开始添加元素

如果您想在form1加载时执行“筛选”

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    ListView1.Items.Clear()
    For Each item As String In allItems
        If (condition) Then
            ListView1.Items.Add(item)
        End If
    Next
End Sub
如果要在运行时根据各种条件更改Listview1中的项,则应依赖允许多重选择的控件(例如复选框)。示例代码:

Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged

    If (CheckBox1.Checked And CheckBox2.Checked And CheckBox3.Checked) Then
        ListView1.Items.Clear()
        For Each item As String In allItems
            If (condition) Then
                ListView1.Items.Add(item)
            End If
        Next
    End If
End Sub

因此,我们的想法不是将所有项目添加到Listbox1,然后过滤它们,而是添加您想要的项目。在我放置“条件”的地方,您可以调用一个函数,根据需要执行复杂的检查。

您可以通过每次添加所需的项,在
SelectedIndexChanged
事件中填充
Listview1
。例如:

Private Sub combobox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles comboBox1.SelectedIndexChanged
    ListView1.Items.Clear()
    Dim curSelectionCombobox As String = combobox1.SelectedItem.ToString()
    For Each item As String In allItems
        If (condition) Then
            ListView1.Items.Add(item)
        End If
    Next
End Sub
使用上面的代码,您可以在
combobox1
curSelectionCombobox
)中获得当前选中的项目,并遍历从数据库检索到的所有元素,并决定(根据给定条件)应该/不应该添加哪些元素。因此,这种方法不使用任何过滤,而是在每次选择
combobox1
更改时从头开始添加元素

如果您想在form1加载时执行“筛选”

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    ListView1.Items.Clear()
    For Each item As String In allItems
        If (condition) Then
            ListView1.Items.Add(item)
        End If
    Next
End Sub
如果要在运行时根据各种条件更改Listview1中的项,则应依赖允许多重选择的控件(例如复选框)。示例代码:

Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged

    If (CheckBox1.Checked And CheckBox2.Checked And CheckBox3.Checked) Then
        ListView1.Items.Clear()
        For Each item As String In allItems
            If (condition) Then
                ListView1.Items.Add(item)
            End If
        Next
    End If
End Sub

因此,我们的想法不是将所有项目添加到Listbox1,然后过滤它们,而是添加您想要的项目。在我放置“条件”的地方,您可以调用一个函数,按照您的意愿执行复杂的检查。

您可以粘贴一些代码吗?我仅有的代码是填充部分。实际上我不知道如何做过滤,如何开始。你想让我发布组合框和列表的填充吗@CarlosLanderasIs ID在这里是唯一的,这意味着它在找到时只显示一行,或者它不是唯一的,这意味着可以显示多行?@Edper好的,我的英语不是很好,所以如果我的措辞错误,请纠正我。select语句实际上与示例不同。语句中有内部联接和分组依据。因此,查询实际上是一个视图。在这个表单中,用户只能查看而不能执行任何操作,因此过滤可能对他们有好处。您可以粘贴一些代码吗?我仅有的代码是填充部分。实际上我不知道如何做过滤,如何开始。你想让我发布组合框和列表的填充吗@CarlosLanderasIs ID在这里是唯一的,这意味着它在找到时只显示一行,或者它不是唯一的,这意味着可以显示多行?@Edper好的,我的英语不是很好,所以如果我的措辞错误,请纠正我。select语句实际上与示例不同。语句中有内部联接和分组依据。因此,查询实际上是一个视图。在这种形式下,用户只能查看而不能做任何事情,因此过滤可能对他们有好处。这是从C#来的,不是吗???我想你的代码在列表视图中添加了什么,但是我在组合框中选择了另一个值会发生什么呢?为什么是从C#开始的呢?!这是VB.NET。每次更改combobox1中选择的索引时,都会调用此函数(如果在designer视图中双击Combox1,则会自动生成此函数)。您可以在变量CurseElectionComboBox中获得确切的值。为什么不实现这个解决方案,对它进行测试并了解它的具体功能?listview1.item.add的末尾有一个分号。我想从大约100多个项目中筛选。您的代码只是添加了一个项,但不清楚。我说的是100多个项目中有10个具有相同的id。如果我这样做,它会添加1个项目。我在问题中放置的代码是表单加载的。所以在表单加载时,这是显示的。啊!对不起,输入错误:)。。。我的代码不添加项目。它会添加您想要的所有项目。当用户选择不同的combobox1项(您一次只能选择一个Combox1项)时,将调用此代码。如果你想同时选择不同的项目,你不应该依赖于组合框,而是复选框,例如;这些也会有相关的事件。如果不想在运行时更新列表,则应在表单加载时填充Listview1时应用条件。我将更新我的代码,以考虑所有这些可能性。我将尝试一下,看看它是如何工作的!(:感谢您的努力,我会让您知道它是否有效。这是从C#来的,不是吗???好吧,您的代码会添加到列表视图中,我想,但在我在组合框中选择另一个值时会发生什么?为什么是从C#来的?这是VB.NET。每次更改组合框1中选择的索引时(如果双击组合框),都会调用此函数