2017-01-01 1 views
1

Je RowFilter d'entrée de zone de texte et voici comment il ressembleDataGridView Filtre ligne où la condition est = [SomeString] ~ Tout ~ [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()); 
      } 

Il prend en charge 2 TextBox et filtre de 2 zone de texte en même temps mais pour l'instant permet de se concentrer sur une zone de texte. Qu'est-ce que je veux atteindre est si je tape dans la zone de texte quelque chose comme Computer%Land, il doit me filtrer tout ce qui doit avoir Computer puis tous les caractères entre et doit avoir Land après.

Peu importe le caractère utilisé pour ce anything between. J'ai utilisé % mais ça peut être n'importe quoi.

Donc, si j'avais table comme ceci:

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

Résultat serait premier, deuxième et quatrième colonne.

Répondre

0

Ne considérez pas votre filtre comme une seule instruction, mais plutôt comme deux instructions à joindre. Autrement dit, vous devez tout ce qui:

  1. Commence par "Ordinateur"; et
  2. Se termine par "Land"

comme ceci:

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

Comme indiqué ci-dessous, en utilisant vos données d'exemple ++, nous voyons les résultats escomptés.

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

Oh j'ai oublié de donner l'exemple où il ne commence pas ou se termine avec cette chaîne. Exmp. '123Computer432Land12' (ça devrait me filtrer) – Parpil

0

Oh, il est accrocheur à cause de chaîne de division, mais voici comment je l'ai fait (il travaille seulement avec un « % »)

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