CheckedListBox-поиск элемента по тексту


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

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

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

2 8

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

Ура,