2012-02-02 2 views
6

У меня есть CheckedListBox, связанный с DataTable. Теперь мне нужно проверить некоторые элементы программным способом, но я обнаружил, что метод SetItemChecked(...) принимает только индекс элемента.CheckedListBox - Поиск элемента по тексту

Есть ли практический способ получить элемент по тексту/метке, не зная индекса элемента?

(Примечание: У меня ограниченный опыт работы с WinForms ...)

ответ

6

Вы можете реализовать свой собственный 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; 
    } 

checkListBox использует object.ToString() для отображения элементов в списке. Вы можете реализовать метод поиска по всем объектам. ToString(), чтобы получить индекс элемента. После того, как у вас есть индекс предмета, вы можете позвонить по телефону SetItemChecked(int, bool);

Надеюсь, что это поможет.

+0

Может быть, это зависит от связывания с DataTable, но 'o.ToString()' в моем case возвращает '' System.Data.DataRowView'', поэтому я думаю, что мне нужно использовать 'myCheckedListBox.GetItemText (o)' ... – davioooh

+0

Да, вы правы –

+0

Когда я увидел «практический путь», я имею в виду существующий метод для этого ... Но кажется, что что-то подобное обеспечивается каркасом, поэтому я, как вы предлагаете, я реализую свой собственный метод. Большое спасибо. – davioooh

0

Вы можете попытаться просмотреть свой Datatable. Вы можете сделать Еогеасп на свойстве DataTabke.Rows или использовать синтаксис SQL, как показано ниже:

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 

Приветствия,