通过多个键或单词过滤DataGridView

时间:2017-06-16 17:01:07

标签: c# datagridview filtering

我正在尝试使用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}%'";
    }
}

1 个答案:

答案 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;
        }

    }
}