winforms CheckedListBox -按文本搜索项目

esyap4oy  于 2022-12-23  发布在  其他
关注(0)|答案(3)|浏览(143)

我有一个CheckedListBox绑定到一个DataTable,现在我需要以编程方式检查一些项,但是我发现SetItemChecked(...)方法只接受项索引。
有没有一种实用的方法可以在不知道项索引的情况下通过文本/标签获取项?
(NOTE:我使用WinForms的经验有限...)

ivqmmu1c

ivqmmu1c1#

您可以实现自己的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);
希望有帮助。

g52tjvyc

g52tjvyc2#

您可以尝试浏览数据表。您可以对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

干杯,

f1tvaqid

f1tvaqid3#

我回答得很晚了,希望能对大家有所帮助。如果你想按名称查找任何项目,我们可以分两步来做。首先按文本获取项目的索引,然后我们可以在索引的帮助下获取实际项目。

var selectedItemIndex = cbxList.Items.IndexOf("sometext");
var selectedItem = cbxList.Items[selectedItemIndex];

相关问题