CheckedListBox-поиск элемента по тексту
У меня есть CheckedListBox
, связанный с DataTable
. Теперь мне нужно проверить некоторые элементы программно,но я нахожу, что метод SetItemChecked(...)
принимает только индекс элемента.
Существует ли практический способ получить элемент по тексту / метке, не зная индекса элемента?
(Примечание: у меня ограниченный опыт работы с WinForms...)
2 ответа:
Вы можете реализовать свой собственный
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; }
Контрольный список использует
object.ToString()
для отображения элементов в списке. Вы можете реализовать метод, который выполняет поиск по всем объектам.ToString () для получения индекса элемента. После того, как у вас есть индекс элемента, вы можете вызватьSetItemChecked(int, bool);
Надеюсь, это поможет.
Вы можете попробовать просмотреть свой Datatable. Вы можете сделать foreach на 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
Ура,