我正在尝试使用DefaultView.RowFilter过滤我的Datagridview,目前可以轻松地按单个单词对列表进行排序。我的问题是我如何用多个单词过滤它。这是一个例子
我的datagridview包含:
1 Topeka
2曼哈顿
3达拉斯
4达拉斯5 Topeka
6威奇托
然后我会输入" Wichita,Dallas,Manhattan"或者"威奇托,达拉斯,曼哈顿"在文本框中,然后它将过滤我的DataGrid只显示
2曼哈顿
3达拉斯
4达拉斯6威奇托
这是我的代码。它不喜欢有一个数组值,其中'%{s}%'但适用于单个过滤器,例如'%{FilterTextBox.Text}%' FilterTextBox.Text是" Dallas"甚至" Dall"例如。
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}%'";
}
}
答案 0 :(得分:0)
可能不是最好的方式,但这确实是需要的。只要你用','分隔它们,就可以使用尽可能多的过滤器。单词之间可以有空格,你甚至可以在逗号之前或之后放置空格,因为我在每个分割上都使用了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;
}
}
}