2008-12-27 8 views
21

Je suis en train de faire une boucle à travers les éléments d'une liste de case à cocher. si elle est cochée, je veux définir 1 valeur. Sinon, je veux définir une autre valeur. J'utilisais le ci-dessous, mais il me donne seulement les éléments cochés:Comment faire une boucle à travers une checkboxlist et de trouver ce qui est vérifié et non vérifié

foreach (DataRowView myRow in clbIncludes.CheckedItems) 
{ 
    MarkVehicle(myRow); 
} 

TIA!

+5

asp316: WebForms ou WinForms? (Les API entourant leurs contrôles respectifs CheckBoxList sont assez différents.) –

Répondre

24
for (int i = 0; i < clbIncludes.Items.Count; i++) 
    if (clbIncludes.GetItemChecked(i)) 
    // Do selected stuff 
    else 
    // Do unselected stuff 

Si le chèque est dans un état indéterminé, cela renverra toujours vrai. Vous pouvez remplacer

if (clbIncludes.GetItemChecked(i)) 

avec

if (clbIncludes.GetItemCheckState(i) == CheckState.Checked) 

si vous voulez inclure uniquement les articles effectivement vérifiés.

+1

En utilisant cela a bien fonctionné. Comment puis-je obtenir le membre valeur/valeur de la case cochée? ClbIncludes.GetItemChecked (i) n'était pas une méthode valide pour moi, mais je l'ai simplement remplacé par clbIncludes.Items [i] .Selected –

+1

clbIncludes.Items [i] .Value – Flater

+0

solution j'obtiens l'erreur ** 'Ne peut pas implicitement convertir le type' System.Collections.Generic.List 'à' System.Web.UI.WebControls.ListItem '' ** et à la seconde je get error at run time ** Le nom 'values' n'existe pas dans le contexte actuel ** –

0

Utilisez la méthode GetItemChecked ou GetItemCheckState de CheckBoxList pour déterminer si un élément est vérifié ou non par son index.

22

Essayez quelque chose comme ceci:

foreach (ListItem listItem in clbIncludes.Items) 
{ 
    if (listItem.Selected) { 
     //do some work 
    } 
    else { 
     //do something else 
    } 
} 
+1

C'est winform. Ainsi, quand j'essaye de référencer la liste, il veut référencer un contrôle Web. J'ai essayé d'utiliser un listviewitem et obtenir l'erreur 'Impossible de lancer l'objet de type' System.Data.DataRowView 'pour taper' System.Windows.Forms.ListViewItem '. Réflexions –

+0

bill martin si c'est winform puis supprimez votre tag qui dit .net. J'ai passé du temps à essayer de comprendre pourquoi votre solution ne fonctionnait pas pour moi (en utilisant. Net) quand j'ai réalisé que la méthode GetItemChecked ne s'applique qu'aux winforms. – Doreen

31

Cela vous donnera une liste des sélectionnés

List<ListItem> items = checkboxlist.Items.Cast<ListItem>().Where(n => n.Selected).ToList(); 

Cela donnera une liste des valeurs de boîtes sélectionnées (changer la valeur de texte si cela est voulu):

var values = checkboxlist.Items.Cast<ListItem>().Where(n => n.Selected).Select(n => n.Value).ToList() 
+1

Je reçois erreur pour les deux .. avec le premier – Interstellar

1

check it useing boucle pour chaque index dans comboxlist.Items[i]

bool CheckedOrUnchecked= comboxlist.CheckedItems.Contains(comboxlist.Items[0]); 

Je pense que résoudre votre but

1

Je pense que la meilleure façon de le faire est d'utiliser CheckedItems:

foreach (DataRowView objDataRowView in CheckBoxList.CheckedItems) 
{ 
    // use objDataRowView as you wish     
} 
Questions connexes