【问题标题】:Filter a DataGridView by multiple keys or words通过多个键或词过滤 DataGridView
【发布时间】:2017-11-19 12:57:51
【问题描述】:

我正在尝试使用 DefaultView.RowFilter 过滤我的 Datagridview,目前可以轻松地按一个单词对列表进行排序。我的问题是如何按多个单词过滤它。这是一个例子

我的数据网格视图将包括:

1 托皮卡

2 曼哈顿

3 达拉斯

4 达拉斯

5 托皮卡

6 威奇托

然后我会在文本框中输入“Wichita,Dallas,Manhattan”或“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}%'";
    }
}

【问题讨论】:

  • 行过滤器使用类似 SQL 的语法。您必须将每个条件 OR 在一起。
  • 谢谢我在下面发布了一个快速解决方案。如果有更好的方法请告诉我。

标签: c# datagridview filtering


【解决方案1】:

可能不是最好的方法,但这正是需要的。只要您用 ',' 分隔它们,它就会执行任意数量的过滤器。单词之间可以有空格,您甚至可以在逗号之前或之后放置空格,因为我在每次拆分时都使用了 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;
        }

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2020-10-23
    相关资源
    最近更新 更多