【问题标题】:DataGridView Row Filter Where condition is = [SomeString] ~Anything~ [SomeString]DataGridView 行过滤器条件为 = [SomeString] ~Anything~ [SomeString]
【发布时间】:2017-05-15 23:01:32
【问题描述】:

我有来自文本框输入的行过滤器,这是它的样子

var dt = (DataTable)dataGridView1.DataSource;
            try
            {
                dt.DefaultView.RowFilter = string.Format("KATBR like '%{0}%'", filterKatbr.Text.Trim().Replace("'", "''")) + "AND " + string.Format("NAZIV like '%{0}%'", filterNaziv.Text.Trim().Replace("'", "''"));
                dataGridView1.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

它支持 2 个文本框并同时从 2 个文本框过滤,但现在让我们专注于一个文本框。我想要实现的是,如果我在文本框中输入类似 Computer%Land 的内容,它需要过滤我必须有 Computer 的所有内容,然后在其后必须有 Land 之间的任何字符。

anything between 使用什么字符并不重要。我使用了%,但它可以是任何东西。

所以如果我有这样的表:

|Computer432Land     |
|Computer321 Land    |
|Land 213 Computer   |
|Computer asd13  Land|

结果将是第一列、第二列和第四列。

【问题讨论】:

    标签: c# datagridview rowfilter


    【解决方案1】:

    不要将您的过滤器视为单个语句,而是将其视为要连接的两个语句。也就是说,您需要满足以下条件:

    1. “计算机”开头;
    2. “土地”结尾

    像这样:

    dt.DefaultView.RowFilter = "ColumnName like 'Computer%' AND ColumnName like '%Land'";
    

    如下所示,使用您的示例数据++我们看到了预期的结果。

    DataTable dt = new DataTable();
    
    dt.Columns.Add("ColumnName", typeof(string));
    
    dt.Rows.Add("Computer432Land");
    dt.Rows.Add("Computer31 Land");
    dt.Rows.Add("Land 213 Computer");
    dt.Rows.Add("Computer asd13 Land");
    dt.Rows.Add("Computer asd13");
    dt.Rows.Add("asd13 Land");
    
    dataGridView1.DataSource = dt;
    

    【讨论】:

    • 哦,我忘了举例说明它不以该字符串开头或结尾。示例。 123Computer432Land12(它应该过滤我)
    【解决方案2】:

    哦,因为拆分字符串很吸引人,但这是我制作它的方法(它只适用于一个 '%')

    string filterNazivStr = filterNaziv.Text;
    if(filterNazivStr.ToLower().Contains('%'))
    {
        int i= 0;
        string first = "";
        string second = "";
        Char separator = '%';
        String[] substrings = filterNazivStr.Split(separator);
        foreach (var substring in substrings)
            {
                switch (i)
                {
                    case 0:
                        first = substring;
                            break;
                    case 1:
                        second = substring;
                            break;
                    default:
                        break;
                }
                i++;
            }
            dt.DefaultView.RowFilter = string.Format("NAZIV like '%{0}%'", first) + " AND " + string.Format("NAZIV like '%{0}%'", second);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      相关资源
      最近更新 更多