2011-02-02 32 views
20

He usado un CheckedListBox sobre mi WinForm en C#. Me he limitado este control como se muestra a continuación -¿Cómo obtener el valor del artículo marcado de CheckedListBox?

chlCompanies.DataSource = dsCompanies.Tables[0]; 
chlCompanies.DisplayMember = "CompanyName"; 
chlCompanies.ValueMember = "ID"; 

puedo conseguir los índices de los elementos comprobados, pero ¿cómo puedo conseguir el ingreso de texto elemento y el valor. Más bien, ¿cómo puedo enumerar a través de CheckedItems accediendo a Text and Value?

Gracias por compartir su tiempo.

Respuesta

25

moldeada de nuevo a su tipo original, el cual será un DataRowView si estás vinculante una mesa, y luego se puede conseguir la identificación y el texto de las columnas correspondientes:

foreach(object itemChecked in checkedListBox1.CheckedItems) 
{ 
    DataRowView castedItem = itemChecked as DataRowView; 
    string comapnyName = castedItem["CompanyName"]; 
    int? id = castedItem["ID"]; 
} 
+0

Amigo mío, creo que no ha profundizado en mi pregunta. Estoy usando CheckedListBox. No necesito ninguna selección, en cambio quiero artículos marcados. La propiedad simplemente da el valor del artículo seleccionado solamente. – IrfanRaza

+0

El compilador genera un mensaje de error sobre SelectedValue. – IrfanRaza

+0

@ w69rdy: la propiedad 'CheckedItems' es una matriz de' objects'. Un 'objeto' no tiene una propiedad' SelectedValue', pueden ser cualquier cosa. –

7

Puede iterar sobre la propiedad CheckedItems:

foreach(object itemChecked in checkedListBox1.CheckedItems) 
{ 
    MyCompanyClass company = (MyCompanyClass)itemChecked;  
    MessageBox.Show("ID: \"" + company.ID.ToString()); 
} 

http://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.checkeditems.aspx

+0

Gracias Evan! ¿Pero mi pregunta es cómo obtener la identificación del asociado del artículo verificado? – IrfanRaza

+0

@IrfanRaza: ver mi ejemplo de código editado. Debería enviar cada elemento que se verificó a su tipo de datos personalizado para acceder a sus propiedades específicas. –

12

EDIT: me di cuenta un poco tarde que estaba obligado a un DataTable. En ese caso, la idea es la misma, y ​​puede convertir a DataRowView y luego tomar su propiedad para obtener un DataRow si desea trabajar con esa clase.

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var row = (item as DataRowView).Row; 
    MessageBox.Show(row["ID"] + ": " + row["CompanyName"]); 
} 

Usted tendría que emitir o analizar los elementos a sus equivalentes inflexible, o utilizar el espacio de nombres System.Data.DataSetExtensions utilizar el DataRowExtensions.Field method se demuestra a continuación:

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var row = (item as DataRowView).Row; 
    int id = row.Field<int>("ID"); 
    string name = row.Field<string>("CompanyName"); 
    MessageBox.Show(id + ": " + name); 
} 

, es necesario especificar el elemento para acceder a las propiedades de tu clase

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var company = (Company)item; 
    MessageBox.Show(company.Id + ": " + company.CompanyName); 
} 

Alternativamente, se puede utilizar el método OfType extensión para obtener el inflexible resultados de vuelta sin poner explícitamente dentro del bucle:

foreach (var item in checkedListBox1.CheckedItems.OfType<Company>()) 
{ 
    MessageBox.Show(item.Id + ": " + item.CompanyName); 
} 
+1

¡Excelente respuesta! – MiBol

-2

Usted puede intentar esto:

string s = ""; 

foreach(DataRowView drv in checkedListBox1.CheckedItems) 
{ 
    s += drv[0].ToString()+","; 
} 
s=s.TrimEnd(','); 
+0

Bienvenido a SO, Madhuchhanda. ¿Cómo es su respuesta sustancialmente diferente de las otras respuestas ya provistas? Lo mejor es no proporcionar respuestas duplicadas ya que simplemente aumenta el ruido y lo hace más confuso para las personas que buscan ayuda. –

0

Egypt Development Blog : Get value of checked item in CheckedListBox in vb.net

cuando se unen CheckedListBox con los datos que puede obtener el valor de los elementos marcados

For i As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1 
        Dim XDRV As DataRowView = CType(CheckedListBox1.CheckedItems(i), DataRowView) 
        Dim XDR As DataRow = XDRV.Row 
        Dim XDisplayMember As String = XDR(CheckedListBox1.DisplayMember).ToString() 
        Dim XValueMember As String = XDR(CheckedListBox1.ValueMember).ToString() 
        MsgBox("DisplayMember : " & XDisplayMember & " - ValueMember : " & XValueMember) 
Next 

Ahora puede utilizar el valor o Visualización de los objetos marcados en CheckedListBox desde el 2 XDisplayMember variable y XValueMember en el bucle

esperanza de sé útil.

0
foreach (int x in chklstTerms.CheckedIndices) 
{ 
    chklstTerms.SelectedIndex=x; 
    termids.Add(chklstTerms.SelectedValue.ToString()); 
} 
-1

intento:

foreach (var item in chlCompanies.CheckedItems){ 
    item.Value //ID 
    item.Text //CompanyName 
    } 
+0

debe agregar una pequeña descripción de lo que hace el código. También te faltan puntos y comas en tu código. –

0

Para obtener los productos que todos los seleccionados en un CheckedListBox Prueba esto:

En este valor THS caso es una cadena pero se ejecuta con otro tipo de objeto:

for (int i = 0; i < myCheckedListBox.Items.Count; i++) 
{ 
    if (myCheckedListBox.GetItemChecked(i) == true) 
    { 

     MessageBox.Show("This is the value of ceckhed Item " + myCheckedListBox.Items[i].ToString()); 

    } 

} 
Cuestiones relacionadas