C# 基于数据库数据检查CheckedBoxList中的项目

C# 基于数据库数据检查CheckedBoxList中的项目,c#,C#,我的c#应用程序中有一个CheckedListBox,它显示数据库中的现有项。现在,对于每个供应商,我要检查它提供的项目。以下是我迄今为止所做的工作 string sel_supplied = "SELECT * FROM item_supplier WHERE supplier_id='" + hid_supid.Text + "'"; MySqlCommand cmd_supplied = new MySqlCommand(sel_supplied, Class_Connection.con

我的c#应用程序中有一个CheckedListBox,它显示数据库中的现有项。现在,对于每个供应商,我要检查它提供的项目。以下是我迄今为止所做的工作

string sel_supplied = "SELECT * FROM item_supplier WHERE supplier_id='" + hid_supid.Text + "'";
MySqlCommand cmd_supplied = new MySqlCommand(sel_supplied, Class_Connection.conn);

try
{
    MySqlDataReader rdr_supplied = cmd_supplied.ExecuteReader();

    while (rdr_supplied.Read())
    {
        MessageBox.Show("Item: " + rdr_supplied["item_id"]);
        int i=0;

        foreach (DataRowView row in chklist_items.Items)
        {                            
            //MessageBox.Show(row[chklist_items.ValueMember].ToString());
            if (row[chklist_items.ValueMember].ToString() == rdr_supplied["item_id"].ToString())
            {
                chklist_items.SetItemChecked(i, true);
            }
            i++;
        }                        
    }
    rdr_supplied.Close();
}
catch (MySqlException ex)
{
    MessageBox.Show(ex.Message);
}
但生成异常的代码表示列表正在更改(在运行时检查),枚举器不能用于更改列表


非常感谢您的帮助。

如果您试图更改您正在迭代的
foreach
循环的集合,这是不允许的,您可以使用
for
循环

for(int i=0;i < chklist_items.Items.Count; i++)
{                            
    //MessageBox.Show(row[chklist_items.ValueMember].ToString());
    DataRowView row =  (DataRowView)chklist_items[i];
    if (row[chklist_items.ValueMember].ToString() == rdr_supplied["item_id"].ToString())
    {
        chklist_items.SetItemChecked(i, true);
    }     
 }                        
for(int i=0;i
我曾经有过这样的想法。但是,在这种情况下,您能告诉我如何获取数据行吗?chklist_items.items[I]将为您提供数据行问题是,我需要访问数据行的值成员。是否有其他方法可以解决此问题?错误是“无法将类型“object”隐式转换为System.Data.DataRowView”…您必须检查您在复选框列表上绑定的对象类型。如果它是DataRowView,那么可以像DataRowView行=(DataRowView)chklist_items[i]一样强制转换它;