c#
2013-05-07 2 views 2 likes 
2

데이터베이스의 기존 항목을 표시하는 CheckedListBox가 C# 응용 프로그램에 있습니다. 이제는 각 공급 업체에 대해 공급하는 품목을 확인하고 싶습니다. 다음은 내가 지금까지 한 일이다.데이터베이스 데이터를 기반으로 CheckedBoxList의 항목 확인

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

그러나 목록이 변경되고 (런타임에 검사 됨) 예외가 생성되고 열거자는 목록을 변경하는 데 사용할 수 없습니다.

도움을 주시면 감사하겠습니다.

답변

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); 
    }  
}       
+0

나는 내 마음 속에 이것을 한 번했습니다. 그런데 어떻게 데이터를 얻을 수 있을지 말해 줄 수 있니? –

+0

chklist_items.Items [i]는 행을 줄 것입니다 – Adil

+0

Thanks @ Adil. 그러나 그것은 효과가 없습니다. –

관련 문제