CheckedListBox - 按文本搜索项目

时间:2012-02-02 09:12:22

标签: c# .net winforms checkedlistbox

我有CheckedListBox绑定到DataTable。现在我需要以编程方式检查一些项目,但我发现SetItemChecked(...)方法只接受项目索引。

是否有一种实用的方法可以在不知道项目索引的情况下按文本/标签获取项目?

(注意:我对WinForms的经验有限......)

2 个答案:

答案 0 :(得分:10)

您可以实施自己的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);

希望它有所帮助。

答案 1 :(得分:0)

您可以尝试浏览数据表。您可以在DataTabke.Rows属性上执行foreach或使用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

干杯,