[英]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,因為它們使用的是相同的查詢。
您可以通過每次添加所需的項來在comboxbox1
的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中然后對其進行過濾,而只是添加所需的項目。 在我放置“條件”的地方,您可以調用執行所需功能的復雜檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.