DataGridView行过滤器条件为= [SomeString]〜任何东西〜[SomeString]

时间:2017-01-01 15:44:05

标签: c# datagridview rowfilter

我有来自文本框输入的rowfilter,这是它的样子

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|

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

2 个答案:

答案 0 :(得分:0)

不要将您的过滤器视为单个语句,而是要将两个语句连接起来。也就是说,您需要以下所有内容:

  1. 开始"计算机&#34 ;;
  2. 结束" Land"
  3. 像这样:

    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;
    

    DataGridView screenshot only displaying rows containing the data "Computer432Land", "Computer31 Land", and "Computer asd13 Land"

答案 1 :(得分:0)

哦,因为分裂字符串很吸引人,但这就是我如何制作它(它只能用一个'%')

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);
    }