L'utilisation de LINQ pour obtenir DataGridView index de ligne où la première colonne a la valeur spécifique
J'aimerais obtenir l'index d'un DataGridViewRow, où la valeur de sa première colonne correspond.
Mon code pour l'instant:
string SearchForThis = "test";
int index = from r in dgv.Rows
where r.Cells[0].Value == SearchForThis
select r.Index;
L'erreur de compilateur:
Ne pouvait pas trouver une implémentation du modèle de requête pour le type de source de "Système".De Windows.Les formulaires.DataGridViewRowCollection'. "Où" est introuvable. Envisager de spécifier explicitement le type de la variable de portée "r".
Essayez de remplacer
dgv.Rows
avec dgv.Rows.Array
. Cela fonctionne?OriginalL'auteur jacobz | 2014-06-06
Vous devez vous connecter pour publier un commentaire.
DataGridViewRowCollection
ne pas mettre en œuvreIEnumerable<T>
, c'est pourquoi vous ne pouvez pas utiliser LINQ, utilisez Énumérable.Cast méthode.Ou avec la Syntaxe de la Requête:
Vous aurez besoin pour obtenir un résultat unique de retour à partir de la collection, c'est pourquoi j'ai utilisé
First
, mais souvenez-vous si il n'y a pas d'articles correspondant aux critères, il lever une exception. Pour surmonter qui voient la solution à la fin de la réponse.Voir:
Énumérable.Cast<TResult>
(Vous pouvez également utiliser
Enumerable.OfType
méthode, qui va ignorer tous ceux qui ne sont pasDataGridViewRow
, mais avecDataGridView
, le Casting est très bien)Vous pouvez également utiliser
FirstOrDefault
pour obtenir la ligne en premier et ensuite obtenir l'index comme:OriginalL'auteur Habib
De manière générale, j'aime ces formes, (bien que le fait que les Lignes ne sont pas une bonne collection est syntaxiquement ennuyeux):
Si vous voulez seulement le premier, il devient plus simple:
OriginalL'auteur Xan-Kun Clark-Davis