提问者:小点点

C#Checkboxlist不允许检查循环中的项


我正在与复选框列表说哪里的客户名称显示。 我将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++;
}

但是我得到了一个错误

附加信息:此枚举数绑定到的列表已被修改。 仅在以下情况下才能使用枚举数:

请建议我一个好的方法检查循环中的复选框项目,但我不能改变我的绑定代码。

谢谢


共1个答案

匿名用户

检查这个答案:在'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++;
}