簡體   English   中英

在vb.net中使用組合框過濾Listview

[英]Filter a Listview with a combobox in vb.net

我想要的主要是隱藏數組而不是重新查詢。 所以我有一個組合框和列表框,其中包含來自數據庫的值,由適配器,數據集,數據表和綁定源完成。 因此,當人員更改組合框值時,它將過濾列表。因此可以說組合框包含ID,因此列表視圖將顯示具有該ID的行。 加載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"

如果我添加了一個參數,它將如何影響combobx,因為它們使用的是相同的查詢。

您可以通過每次添加所需的項來在comboxbox1SelectedIndexChanged事件上填充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

使用上面的代碼,您可以在combobox1curSelectionCombobox )中獲得當前選定的項目,還可以遍歷從數據庫中檢索到的所有元素,並(由於給定的條件)決定不應該/不應該添加的元素。 因此,此方法不使用任何過濾,而是在每次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中然后對其進行過濾,而只是添加所需的項目。 在我放置“條件”的地方,您可以調用執行所需功能的復雜檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM