我正在与复选框列表说哪里的客户名称显示。 我将checkbox List与datatable绑定,因为我需要显示客户机名称并将客户机代码设置为值成员,因为以后我需要在DB中保存选定的客户机代码。 这样我就绑定了我的复选框列表。
if (dsCity.Tables.Count > 0)
{
if (dsCity.Tables[0].Rows.Count > 0)
{
// bidning data with combobox from db
((ListBox)checkListClients).DataSource = dsCity.Tables[0];
((ListBox)checkListClients).DisplayMember = "ClientName";
((ListBox)checkListClients).ValueMember = "ClientCode";
}
}
绑定客户机数据后,现在我需要在循环中检查复选框项,我将从数据库中获取选定客户机的客户机数据,并希望显示选中的客户机。 我是这样做的
foreach (DataRowView item in checkListClients.Items)
{
strClientID = item["ClientName"].ToString();
//find client code exist in datatable...if exist then check the item
if (dt.AsEnumerable().Any(x => x.Field<string>("ClientName").ToString().ToUpper() == strClientID.ToUpper()))
{
checkListClients.SetItemChecked(index, true);
}
index++;
}
但是我得到了一个错误
附加信息:此枚举数绑定到的列表已被修改。 仅在以下情况下才能使用枚举数:
请建议我一个好的方法检查循环中的复选框项目,但我不能改变我的绑定代码。
谢谢
检查这个答案:在'foreach'循环中修改列表的最佳方法是什么?
如果需要修改正在迭代的集合中的项,只需使用for循环。
for (var i = 0; i < checkListClients.Items.Count; i++)
{
var item = checkListClients.Items[i];
strClientID = item["ClientName"].ToString();
//find client code exist in datatable...if exist then check the item
if (dt.AsEnumerable().Any(x => x.Field<string>("ClientName").ToString().ToUpper() == strClientID.ToUpper()))
{
checkListClients.SetItemChecked(i, true);
}
i++;
}