CheckedListBox-按文本搜索项目
本文关键字:项目 搜索 文本 CheckedListBox- | 更新日期: 2023-09-27 18:22:18
我有一个绑定到DataTable
的CheckedListBox
。现在我需要以编程方式检查一些项,但我发现SetItemChecked(...)
方法只接受项索引。
有没有一种实用的方法可以在不知道项目索引的情况下通过文本/标签获取项目?
(注意:我使用WinForms的经验有限…)
您可以实现自己的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];