C# 按多个键或字筛选DataGridView
我正在尝试使用DefaultView.RowFilter筛选我的Datagridview,目前可以轻松地按单个单词对列表进行排序。我的问题是如何用多个词来过滤它。这里有一个例子 我的datagridview将包括: 1托皮卡 2曼哈顿 达拉斯3号 达拉斯4号 5托皮卡 威奇托6号 然后,我会在文本框中键入“Wichita,达拉斯,曼哈顿”或“Wichita,达拉斯,曼哈顿”,然后它会过滤我的数据网格以仅显示 2曼哈顿 达拉斯3号 达拉斯4号 威奇托6号 这是我的密码。它不喜欢在“{s}%”为空的情况下有一个数组值,但它适用于单个筛选器,例如“{FilterTextBox.Text}%”,其中FilterTextBox.Text为“Dallas”甚至“Dall”C# 按多个键或字筛选DataGridView,c#,datagridview,filtering,C#,Datagridview,Filtering,我正在尝试使用DefaultView.RowFilter筛选我的Datagridview,目前可以轻松地按单个单词对列表进行排序。我的问题是如何用多个词来过滤它。这里有一个例子 我的datagridview将包括: 1托皮卡 2曼哈顿 达拉斯3号 达拉斯4号 5托皮卡 威奇托6号 然后,我会在文本框中键入“Wichita,达拉斯,曼哈顿”或“Wichita,达拉斯,曼哈顿”,然后它会过滤我的数据网格以仅显示 2曼哈顿 达拉斯3号 达拉斯4号 威奇托6号 这是我的密码。它不喜欢在“{s}%”为空的
private void FilterTxtbox_TextChanged(object sender, EventArgs e)
{
if (uxFilterTxtbox.Text != "Type Here...") //IGNORE... This is for my watermark capibility
{
string[] s = uxFilterTxtbox.Text.Split(',');
(uxWiuInfoGrid.DataSource as DataTable).DefaultView.RowFilter =
$"WiuAddressCol + SubDivLongNameCol + StationNameCol + LineSegCol + MilepostCol + MilepostSuffixCol LIKE '%{s}%'";
}
}
也许不是最好的方法,但这正是所需要的。只要用“,”分隔,它将执行任意数量的过滤器。单词之间可以有空格,甚至可以在逗号之前或之后加空格,因为我在每次拆分时都使用Trim()
private void FilterTxtbox_TextChanged(object sender, EventArgs e)
{
string allColumns = "WiuAddressCol + SubDivLongNameCol + StationNameCol + LineSegCol + MilepostCol + MilepostSuffixCol";
if (uxFilterTxtbox.Text != "Type Here...")
{
string[] split = uxFilterTxtbox.Text.Split(',');
var mainSearchString = allColumns + " LIKE '%"+ split[0]?.Trim( )+ "%'";
if (split.Length > 1)
{
for (int i = 1; i < split.Length; i++)
{
mainSearchString += " OR "+ allColumns + " LIKE '%" + split[i]?.Trim() + "%'";
}
(uxWiuInfoGrid.DataSource as DataTable).DefaultView.RowFilter = mainSearchString;
}
else
{
(uxWiuInfoGrid.DataSource as DataTable).DefaultView.RowFilter = mainSearchString;
}
}
}
private void FilterTxtbox\u text已更改(对象发送方,事件参数e)
{
string allColumns=“WiuAddressCol+SubDivLongNameCol+StationNameCol+LineSegCol+MilepostCol+MilepostSuffixCol”;
如果(uxFilterTxtbox.Text!=“在此处键入…”)
{
string[]split=uxFilterTxtbox.Text.split(',');
var mainSearchString=allColumns+“像“%”+拆分[0]?.Trim()+“%”;
如果(拆分长度>1)
{
for(int i=1;i
行筛选器使用类似SQL的语法。你必须把每一个条件都放在一起。谢谢你,我在下面发布了一个快速解决方案。如果有更好的办法,请告诉我。