2012-02-02 16 views
6

Tengo un CheckedListBox vinculado a un DataTable. Ahora necesito verificar algunos elementos programáticamente, pero me parece que el método SetItemChecked(...) solo acepta el índice del artículo.CheckedListBox - Buscar un elemento por texto

¿Existe alguna forma práctica de obtener un artículo por texto/etiqueta, sin conocer el índice del artículo?

(NOTA: Tengo una experiencia limitada con WinForms ...)

Respuesta

6

Usted puede implementar su propio SetItemChecked(string item);

private void SetItemChecked(string item) 
    { 
     int index = GetItemIndex(item); 

     if (index < 0) return; 

     myCheckedListBox.SetItemChecked(index, true); 
    } 

    private int GetItemIndex(string item) 
    { 
     int index = 0; 

     foreach (object o in myCheckedListBox.Items) 
     { 
      if (item == o.ToString()) 
      { 
       return index; 
      } 

      index++; 
     } 

     return -1; 
    } 

El CheckListBox utiliza object.ToString() para mostrar los elementos de la lista. Usted puede implementar un método que busque en todos los objetos.ToString() para obtener un índice de artículo. Una vez que tenga el índice del artículo, puede llamar al SetItemChecked(int, bool);

Espero que ayude.

+0

Tal vez depende de la unión con un DataTable, pero 'o.ToString()' en mi case returns '' System.Data.DataRowView "', así que creo que tengo que usar 'myCheckedListBox.GetItemText (o)' ... – davioooh

+0

Sí, tienes razón –

+0

Cuando vi "forma práctica" me refiero a un método existente para hacerlo ... Pero parece que el marco proporciona algo así, así que implementaré mi propio método, como sugieres. Muchas gracias. – davioooh

0

Puede intentar navegar por su Datatable. Usted puede hacer un foreach en la propiedad DataTabke.Rows o utilizar la sintaxis SQL de la siguiente manera:

DataTable dtTable = ... 
DataRow[] drMatchingItems = dtTable.Select("label = 'plop' OR label like '%ploup%'"); // I assumed there is a "label" column in your table 
int itemPos = drMatchingItems[0][id]; // take first item, TODO: do some checking of the length/matching rows 

Cheers,

Cuestiones relacionadas