2010-02-26 11 views
0

Mon application contient une base de données remplie et la lie à un ddatagridview en définissant la propriété de la source de données.Pourquoi mon datagridview.rowfilter ne fonctionne pas. Je reçois toujours un message d'erreur de syntaxe

Au moment de l'exécution, je veux filtrer cette table. Lorsque l'utilisateur clique sur un bouton, je cours le code suivant:

dataManager.VDMSTables.DataTable.DefaultView.RowFilter = column + " LIKE '%" + criteria + "%'"; 

Toutes les classes sont remplis correctement. À l'exécution lorsque j'atteins cette ligne, j'obtiens le message d'erreur suivant:

Erreur de syntaxe: Opérande manquant après l'opérateur 'Données'. Les variables que j'utilise pour construire le rowfilter sont correctement remplies. Même quand je code dur une chaîne je reçois toujours la même erreur. Pourquoi?

+2

Avez-vous un exemple de valeur de critère à l'origine du problème? Je suppose que la colonne est une chaîne et pas un objet Colonne? – Crispy

Répondre

2

À quoi ressemble la chaîne que vous construisez lorsque vous l'affichez dans le débogueur? Le mot "Data" n'apparaît pas ici, n'est-ce pas?

Si tel est le cas, cela signifie que Data est un mot réservé et que vous devez le marquer comme tel. Comme dans:

dataManager.VDMSTables.DataTable.DefaultView.RowFilter 
    = String.Format("[{0}] LIKE '%{1}%'" 
     , column 
     , YourSingleQuoteEscape(criteria)); 

qui produira:

"[Data] like '%strawberries%'" 

... qui devrait analyser correctement pour votre RowFilter.

+0

Non, ce n'est pas le cas. Même lorsque je code dur la chaîne à quelque chose comme chaîne s = "nom de colonne = 'test'" Je reçois cette erreur. puis j'utilise cette chaîne s comme le filtre de ligne comme suit: dataview.rowfilter = s; – gsirianni

+0

J'ai vu la méthode stirng.Format utilisée sur certains articles en ligne. Je vais essayer. – gsirianni

+0

Pourquoi alors pensez-vous que cette ligne est la source de votre problème? Si vous pouvez définir .RowFilter = "mycol like 'fishies'" et qu'il jette encore, alors votre prochaine étape est de supprimer complètement la ligne et de voir ce qui se passe. Mon soupçon est qu'il va alors jeter sur n'importe quelle ligne qui est arrivé à flotter jusqu'à la même position. En d'autres termes, regardez les lignes ci-dessus et ci-dessous. –