CheckedListBox - 通过文本搜索项目

发布于 2025-01-02 12:06:32 字数 216 浏览 0 评论 0原文

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

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

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

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...)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

长途伴 2025-01-09 12:06:32

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

烟燃烟灭 2025-01-09 12:06:32

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

干杯,

You may try to browse your Datatable. YOu can do a foreach on the DataTabke.Rows property or use SQL syntax as below:

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,

南风几经秋 2025-01-09 12:06:32

我很晚才回答,希望对某人有所帮助。如果您想按名称查找任何项目,我们可以分两步完成。首先通过文本获取项目的索引,然后我们可以借助索引获取实际的项目。

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

I am answering it very late, I hope it will help someone. If you want to find any item by name we can do it in two steps. First get index of item by text and then we can get actual item with the help of index.

var selectedItemIndex = cbxList.Items.IndexOf("sometext");
var selectedItem = cbxList.Items[selectedItemIndex];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文