2008-12-27 6 views
21

Estoy tratando de recorrer los elementos de una lista de casilla de verificación. si está marcado, quiero establecer 1 valor. Si no, quiero establecer otro valor. Estaba usando la siguiente, pero solo me da elementos marcados:Cómo realizar un bucle a través de una lista de casilla de verificación y para encontrar lo que está marcado y no marcado

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

TIA!

+5

asp316: Web Forms o Windows Forms? (Las API que rodean sus respectivos controles CheckBoxList son bastante diferentes). –

Respuesta

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

Si el cheque está en el estado indeterminado, esto todavía devolverá true. Es posible que desee reemplazar

if (clbIncludes.GetItemChecked(i)) 

con

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

si desea incluir sólo los elementos de hecho comprobado.

+1

Usando esto funcionó muy bien. ¿Cómo puedo obtener el valor/valor del miembro de la casilla marcada? –

+1

clbIncludes.Items [i] .Value – Flater

+0

clbIncludes.GetItemChecked (i) no era un método válido para mí, pero simplemente lo reemplacé por clbIncludes.Items [i] .Selected –

0

Utilice el método GetItemChecked o GetItemCheckState de CheckBoxList para averiguar si un elemento está marcado o no por su índice.

22

intentar algo como esto:

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

Es winform. Entonces, cuando trato de hacer referencia al elemento de lista, quiero hacer referencia al control web. Intenté usar un listviewitem y obtener el error 'No se puede convertir el objeto del tipo' System.Data.DataRowView 'para escribir' System.Windows.Forms.ListViewItem '. Pensamientos –

+0

bill martin si es winform, luego quite la etiqueta que dice .net. Pasé algún tiempo tratando de descubrir por qué su solución no funcionó para mí (usando .net) cuando me di cuenta de que el método GetItemChecked solo se aplica a las formas de pago. – Doreen

31

Esto le dará una lista de seleccionados

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

Esto le dará una lista de los valores de las cajas seleccionadas (Cambio de valores para el texto si que se quiera):

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

Recibo un error para ambos ... con el primero la solución me da error ** 'No se puede convertir implícitamente el tipo' System.Collections.Generic.List 'a' System.Web.UI.WebControls.ListItem '' ** y con el segundo i obtener error en el tiempo de ejecución ** El nombre 'valores' no existe en el contexto actual ** – Interstellar

1

comprobarlo useing bucle para cada índice en comboxlist.Items[i]

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

creo que a resolver su propósito

1

Creo que la mejor manera de hacer esto es utilizar CheckedItems:

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