我想使用文本框过滤DataGridView,以在由具有组合中所有列名称的ComboBox定义的现有列中查找匹配项。
例如,如果我在ComboBox中选择“名称”,然后在文本框中输入“ S”,则DataGridView仅显示“名称”列以“ S”开头的行,因此我将得到“ StackOverFlow”,“牛排”等等。
问题是,我不想每次过滤时都启动SQL请求,所以我将节省资源。
这是我的实际代码在哪里
ListProd
是我的DataGridView CBFiltre
是我的组合框tbRefChantier
是我的文本框 ClassTables.Produits
是我的数据集,具有我的MariaDB数据库中的每个条目
Private Sub tbRefChantier_TextChanged(sender As Object, e As EventArgs) Handles tbRefChantier.TextChanged
Try
ListeProd.DataSource = ClassTables.Produits.Tables("Produits").Select(CbFiltre.Text & " Like '%" & tbRefChantier.Text & "%'")
Catch Exc As Exception
MsgBox("Erreur logiciel :" & Chr(10) & Chr(10) & Exc.Message)
End Try
End Sub
但是当我尝试对其进行过滤时,我的DataGridView仅显示
但是似乎实际上是过滤的,因为当我键入某些东西时行数会改变
答案 0 :(得分:1)
由于@jmcilhinney的帮助,我得以解决了这个问题。
我最终以自己的形式创建了
Dim BindingData As New BindingSource
然后
BindingData.DataSource = Class.MyDataSetName.Tables("NameOfTheTable")
TheDataGridView.DataSource = BindingData
在Textbox.TextChange上
Try
BindingData.Filter = ComboBoxFilter.Text & " Like '%" & TextBoxFilter.Text & "%'"
TheDataGridView.DataSource = BindingData
Catch Exc As Exception
MsgBox("Erreur logiciel :" & Chr(10) & Chr(10) & Exc.Message)
End Try