2013-05-07 1 views
2

J'ai une CheckedListBox dans mon application C# qui affiche les éléments existants dans la base de données. Maintenant, pour chaque fournisseur, je veux vérifier les articles qu'il fournit. Voici ce que j'ai fait jusqu'à présent.Vérification des éléments dans une CheckedBoxList basée sur des données de base de données

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

Mais le code générant une exception en disant que, la liste est en cours de modification (comme étant l'exécution cochée) et recenseur ne peut pas être utilisé pour changer la liste.

Toute aide est appréciée, s'il vous plaît.

Répondre

2

Vous essayez de changer la collection sur laquelle vous itérez par foreach boucle qui n'est pas autorisée, vous pouvez utiliser la boucle for à la place.

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

Je l'ai déjà eu dans mon esprit. Mais pouvez-vous me dire comment pourrais-je obtenir le datarow dans ce cas? –

+0

chklist_items.Items [i] vous donnera la ligne – Adil

+0

Merci @Adil. Mais ça ne marche pas. –

Questions connexes