CheckedListBox - Search for an item by text

davioooh picture davioooh · Feb 2, 2012 · Viewed 11.8k times · Source

I have a CheckedListBox bound to a DataTable. Now I need to check some items programmatically, but I find that the SetItemChecked(...) method only accepts the item index.

Is there a practical way to get an item by text/label, without knowing the item index?

(NOTE: I've got limited experience with WinForms...)

Answer

Daniel Peñalba picture Daniel Peñalba · Feb 2, 2012

You can implement your own 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;
    }

The checkListBox uses object.ToString() to show items in the list. You you can implement a method that search across all objects.ToString() to get an item index. Once you have the item index, you can call SetItemChecked(int, bool);

Hope it helps.