2017-01-01 48 views
1

我的RowFilter從文本輸入和這裏是如何看起來像DataGridView的行篩選Where條件是= [SomeString]〜任何〜[SomeString]

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| 

結果將是第一,第二和第四列。

回答

0

不要將您的過濾器視爲單個語句,而應將其視爲兩個要加入的語句。也就是說,你需要一切:

  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; 

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

+0

哦,我忘了給例如它不會以該字符串開始或結束。 Exmp。 '123Computer432Land12'(它應該過濾我這個) – Parpil

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); 
    } 
相關問題