Donc, vous essayez de filtrer en utilisant la clause LIKE, où vous voulez que les caractères "[" ou "]" soient interprétés comme du texte à rechercher?
De l'aide de Visual Studio sur la propriété DataColumn.Expression:
"Si un support est dans la clause, les caractères de support doivent être échappés entre parenthèses (par exemple [[] ou []])."
Ainsi, vous pouvez utiliser le code comme ceci:
DataTable dt = new DataTable("t1");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Description", typeof(string));
dt.Rows.Add(new object[] { 1, "pie"});
dt.Rows.Add(new object[] { 2, "cake [mud]" });
string part = "[mud]";
part = part.Replace("[", "\x01");
part = part.Replace("]", "[]]");
part = part.Replace("\x01", "[[]");
string filter = "Description LIKE '*" + part + "*'";
DataView dv = new DataView(dt, filter, null, DataViewRowState.CurrentRows);
MessageBox.Show("Num Rows selected : " + dv.Count.ToString());
Notez qu'un HACK est utilisé. Le caractère \ x01 (que je suppose ne pas être dans la variable "part" initialement), est utilisé pour remplacer temporairement les parenthèses gauches. Une fois que les crochets droits sont échappés, les caractères temporaires "\ x01" sont remplacés par la séquence d'échappement requise pour le crochet gauche.
Cet exemple fonctionne très bien. Lorsque j'essaie d'utiliser les mêmes techniques dans mon programme (base de données SQL), je n'obtiens aucun résultat. Il semble que le pilote SQL ADO est la source du problème? En outre, si je l'essaie dans l'Analyseur de requêtes, un crochet de fin ("]") renvoie les résultats attendus, mais l'utilisation d'un crochet principal ("[") ne donne aucun résultat. L'utilisation des deux renvoie des lignes contenant l'une des lettres entre parenthèses. –
@Jeff - cela semble étrange. Une fois que les données sont dans le DataSet, il ne devrait pas importer que la source des données était SQL Server. En outre, la clause LIKE de DataColumn.Expression est un animal différent de la clause T-SQL LIKE de SQL Server. –