2

我的 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);
}

但是生成异常的代码说,列表正在更改(作为正在检查的运行时)并且枚举器不能用于更改列表。

任何帮助表示赞赏,请。

4

1 回答 1

2

您正在尝试更改您正在通过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);
    }     
 }                        
于 2013-05-07T09:28:44.380 回答