2009-07-16 7 views
2

Dans mon application, j'utilise une vue de données pour appliquer les filtres là où les options de filtrage sont transmises dynamiquement. S'il y a 2 paramètres de filtre, la vue de données doit être filtrée pour le paramètre 1 puis le paramètre 2 . J'utilise une méthode appelée dans une boucle for où je règle le nombre total de paramètres sélectionnés en utilisant une liste, mais le filtrage est effectué uniquement pour le dernier paramètre. Voici mon code:Filtrage de DataView avec plusieurs colonnes

string str = ""; 
for (int i = 0; i < listbox.Items.Count; i++) 
{ 
    if (listbox.Items[i].Selected) 
    { 
     if (str != string.Empty) 
     { 
      str = str + "," + listbox.Items[i].Text; 

     } 
     else 
     { 
      str = str + listbox.Items[i].Text; 
     } 
    } 
} 

string[] items = str.Split(','); 
for (int i = 0; i < items.Length; i++) 
{ 
    ApplyFilter(items[i],dv); 
} 

private DataView ApplyFilter(string str,DataView newdv) 
{ 
    newdv.RowFilter = "[" + str + "]=" + ddl.SelectedItem.ToString(); 

    return newdv; 
} 

S'il vous plaît fournir une solution adaptée.

Merci à l'avance ...

Répondre

7

Vous devez appliquer votre filtre tout à fait, pas un par un:

newdv.RowFilter = "Column1 = " + value1 + " AND Column2 = " + value2; 

Vous pouvez changer votre code comme:

string[] items = str.Split(','); 
string filter = string.Empty; 
for (int i = 0; i < items.Length; i++) 
{ 
    filter += items[i] + " = " + dropdown.SelectedValue; 
    if (i != items.Length - 1) 
    { 
     filter += " AND "; 
    } 
} 
newdv.RowFilter = filter; 
+0

mais iam pas sûr de combien de paramètres de filtrage seront passed.how pour ajouter les colonnes dans le même RowFilter –

+0

Merci pour la réponse. ça fonctionne bien. –

0

Je pense Vous devez créer une chaîne de filtrage complète, puis définir ce filtre sur votre DataView. Par exemple:


StringBuilder sb = new StringBuilder() 
for (int i = 0; i < listbox.Items.Count; i++) { 
    if (!listbox.Items[i].Selected) { 
    continue; 
    } 

    if (sb.Length > 0) { 
    sb.Append(" and "); 
    } 
    sb.AppendFormat("[{0}] = {1}", listbox.Items[i].Text, ddl.SelectedItem); 
} 

dv.RowFilter = sb.ToString(); 
0
DataView dv = new DataView(dt); 
string filterText = "some search criteria"; 
dv.RowFilter = "Column1 + Column2 + Column3 Like '%" + filterText + "%'"; 
+1

Bien que cet extrait de code puisse résoudre la question, [y compris une explication] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) aide vraiment à améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, ceci réduit la lisibilité du code et des explications! – kayess