我有一个CheckedListBox(winforms),其数据绑定到数据表:
clbCustomer.DataSource = ds.Tables["Default"];
clbCustomer.DisplayMember = "desc";
clbCustomer.ValueMember = "customerId";
现在,我想在checkedlistbox中搜索特定的客户ID,然后选择该行。我可以通过以下声明来做到这一点:
// Find the index
int index = 0;
foreach (DataRowView item in clbCustomer.Items)
{
int cusId = Convert.ToInt32(item["customerId"]);
if (cusId == 255)
{
break;
}
index++;
}
// Select the customer
clbCustomer.SetItemChecked(index, true);
然而,这样做似乎非常笨重。我试图将上面的代码转换为linq但无法完成它。以下是我到目前为止的情况:
// Find the index (not working)
int index = clbCustomer.Items.Cast<DataRowView>().Where(x => x["customerId"] == 255);
// Select the customer
clbCustomer.SetItemChecked(index, true);
但不确定如何使用linq提取该客户ID的索引。任何帮助,将不胜感激。感谢。
由Keithin8a提供的解决方案:
var item = clbCustomer.Items.Cast<DataRowView>().Where(x => Convert.ToInt32(x["customerId"]) == 255).FirstOrDefault();
int index = clbCustomer.Items.IndexOf(item);
答案 0 :(得分:2)
var item = clbCustomer.Items.Cast<DataRowView>().Where(x => Convert.ToInt32(x["customerId"]) == 255).FirstOrDefault()
那会让你成为一个单品,而不是一个集合。然后,您可以通过调用
获取此项目的索引int index = clbCustomer.Items.IndexOf(item);
那应该能得到你想要的东西。