1

我想要的主要是隐藏数组而不是请求。所以我有一个组合框和列表框,其中包含由适配器、数据集、数据表和绑定源完成的数据库值。. 因此,当该人更改组合框值时,它将过滤列表。因此,可以说组合框包含 ID,因此列表视图将显示具有该 ID 的那些行。Onload listview 显示所有属性。那么如果没有 Requery 怎么办????所以下面我有填充列表和组合框部分。

这是一个链接,但它不是很有帮助 VB.NET Listview 多列过滤器

   Dim listcount As Integer = listview1.Columns.Count

    With listview1
        .Columns.Clear()
        .View = View.Details


        .GridLines = True


        .Columns.Add("Name").Width = 70
        .Columns.Add("ID").Width = 60
        .Columns.Add("Number").Width = 90


    End With


    Try


        strQuery = "Select * From Table"



        DB.Connection = New SqlConnection(strConnection)

        DB.Connection.Open()
        ' add a daaset
       Adapter = New SqlDataAdapter(strQuery, DB.Connection)
        ListRS = New DataSet



        Adapter.Fill(ListRS)

        Dim table As DataTable = ListRS.Tables(0)


        bnsrc = New BindingSource
        bnsrc.DataSource = ListRS.Tables(0)
        combobox1.DataSource = bnsrc
         combobox1.DisplayMember = "ID"
        combobox1.ValueMember = "ID"
        combobox1.AutoCompleteSource = AutoCompleteSource.ListItems

       Listview1.Items.Clear()



        DB.Connection.Close()

因此,如果我们要进行重新查询,那么更改 sql 语句将是相同的。

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

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

4

1 回答 1

1

Listview1您可以通过每次添加所需的项目来填充SelectedIndexChanged事件。comboxbox1例子:

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 然后过滤它们,而只是添加您想要的项目。我把“条件”放在哪里,你可以调用一个函数来执行你想要的复杂检查。

于 2013-07-04T08:50:40.383 回答