Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按多个键或字筛选DataGridView_C#_Datagridview_Filtering - Fatal编程技术网

C# 按多个键或字筛选DataGridView

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}%”为空的

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

我的datagridview将包括:

1托皮卡

2曼哈顿

达拉斯3号

达拉斯4号

5托皮卡

威奇托6号

然后,我会在文本框中键入“Wichita,达拉斯,曼哈顿”或“Wichita,达拉斯,曼哈顿”,然后它会过滤我的数据网格以仅显示

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}%'";
    }
}

也许不是最好的方法,但这正是所需要的。只要用“,”分隔,它将执行任意数量的过滤器。单词之间可以有空格,甚至可以在逗号之前或之后加空格,因为我在每次拆分时都使用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的语法。你必须把每一个条件都放在一起。谢谢你,我在下面发布了一个快速解决方案。如果有更好的办法,请告诉我。