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 に答える