LINQ: trouver toutes les cases cochées dans un GridView
Considérer le courant de l'algorithme ci-dessous qui parcourt une GridView
's lignes pour savoir si le contenu Checkbox
est sélectionné/checked.
List<int> checkedIDs = new List<int>();
foreach (GridViewRow msgRow in messagesGrid.Rows)
{
CheckBox chk = (CheckBox)msgRow.FindControl("chkUpdateStatus");
if (chk.Checked){
//we want the GridViewRow's DataKey value
checkedMsgIDs.Add(int.Parse(messagesGrid.DataKeys[msgRow.RowIndex].Value.ToString()));
}
}
Cela fonctionne comme prévu: vous êtes de gauche avec un entièrement rempli List<int>
.
Question: Comment voulez-vous ou pourriez-vous ré-écrire ou améliorer cet algorithme à l'aide de LINQ pour la recherche de la GridView
pour toutes les lignes qui ont leur Checkbox
sélectionné/vérifié?
source d'informationauteur p.campbell
Vous devez vous connecter pour publier un commentaire.
Je suis sûr que vous n'allez pas obtenir n'importe quelle amélioration de la performance de cela, mais il pourrait rendre légèrement plus facile à lire:
De nouveau, pas sûr que ça fait une différence. Aussi, pourquoi êtes-vous de la conversion d'une chaîne puis à un int? Est-il quelque chose de
Convert.ToInt32
ne peut pas faire pour vous?Je ne suis pas sûr si des Lignes est IEnumerable ils ont peut-être pas, mais je vais supposer qu'ils sont
J'ai juste fait cette dans le bloc-notes, il y a peut être une erreur de compilation. Mais c'est la façon dont vous pourriez faire la même chose avec Linq.
J'ai quelque chose de similaire, mais je l'utilise en plus d'un endroit, j'ai donc créé une méthode d'extension.
Alors maintenant, je peux faire quelque chose avec tous les bagages lignes. Le compilateur est assez bon à déduire les types, mais parfois j'ai besoin de déclarer explicitement checkedRows type IEnumerable.