CheckedListBox-按文本搜索项目

本文关键字:项目 搜索 文本 CheckedListBox- | 更新日期: 2023-09-27 18:22:18

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

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

(注意:我使用WinForms的经验有限…)

CheckedListBox-按文本搜索项目

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

希望能有所帮助。

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

干杯,

我很晚才回复,我希望它能帮助到别人。如果你想按名称查找任何项目,我们可以分两步完成。首先通过文本获取项目的索引,然后借助索引可以获得实际项目。

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