12
votes

LINQ: Trouver toutes les cases à cocher enregistrées dans une grille

Considérez l'algorithme actuel ci-dessous qui itière via des lignes de code GridView pour déterminer si la case à cocher Contenue est sélectionnée / cochée. XXX < p> Cela fonctionne comme prévu: vous êtes resté avec une liste entièrement peuplée .

question : comment voudriez-vous ou pouvez-vous re -write ou améliorer cet algorithme à l'aide de Linq pour rechercher gridview pour toutes les lignes qui ont leur coche sélectionné / cochée?


0 commentaires

3 Réponses :


20
votes

Je suis à peu près sûr que vous n'allez pas obtenir d'amélioration de la performance à partir de cela, mais cela pourrait le rendre légèrement plus facile à lire: xxx

à nouveau , pas sûr que cela fait une différence. En outre, pourquoi convoquez-vous une chaîne alors à un int? Y a-t-il quelque chose convert.toint32 ne peut pas faire pour vous?


2 commentaires

Merci LC! convert.toint32 devrait fonctionner correctement. Merci pour cette amélioration aussi!


Cela pourrait sembler idiot mais assurez-vous que vous avez 'à l'aide de System.Linq;' en place avant d'essayer d'écrire cette déclaration. J'ai pu écrire toutes les choses de Linq sans qu'il se plaint de ce que j'ai essayé de faire la fonte implicite (à partir de GridViewRow Msgrow), le compilateur s'est plaint de ne pas avoir de définition pour «Cast» dans la grilleviewrowowcollection et rien d'Intelli-Sense m'a dit que j'avais besoin d'une utilisation.



9
votes

Je ne suis pas sûr que si des rangées sont iénumérables, elles ne peuvent pas être, mais je vais supposer qu'ils sont xxx

je viens de le faire dans le bloc-notes, il pourrait y avoir une erreur de compilation de là . Mais c'est ainsi que vous pourriez faire la même chose avec Linq.


3 commentaires

Ouais, on dirait la même chose que la mienne, mais dans la syntaxe de méthode et avec un tolist à la fin (et des spécificateurs de type générique explicite).


Oui, j'ai vu ça. J'aime la syntaxe de la méthode pour moi, il a l'air plus propre.


C'est sans typable (à partir de .NET 4.0). Vous voudriez faire rows.oftype () Où () ...



4
votes

J'ai quelque chose de similaire, mais je l'utilisais dans plus d'un endroit, donc j'ai créé une méthode d'extension.

gvTasksToBill.ActOnCheckedRows("RowLevelCheckBox", checkedRows =>
{
    foreach (int id in checkedRows)
    {
       // do something with id
    }
});


0 commentaires