CheckedListBox - поиск элемента по тексту - PullRequest
8 голосов
/ 02 февраля 2012

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

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

(ПРИМЕЧАНИЕ. У меня ограниченный опыт работы с WinForms ...)

Ответы [ 2 ]

10 голосов
/ 02 февраля 2012

Вы можете реализовать свой собственный 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 голосов
/ 02 февраля 2012

Вы можете попробовать просмотреть свой 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

Cheers,

...