2014-07-17 4 views
0

J'ai deux checkBoxLists, l'un est appelé CheckBoxList1 (3 éléments, appelons les A, B, et C) et l'autre est CheckBoxList2 (Contient 2 éléments permet de les appeler 1 et 2). J'insère les valeurs qui ont été sélectionnées de checkboxlist1 et checkboxlist2 à la base de données en deux colonnes, cependant je rencontre ce problème: Quand je choisis par exemple A et B puis 1 et 2 ce sont les valeurs qui sont importées à la base de données:C# imbriqué boucle foreach - CheckBoxList

column1 column2 
A  1, 2 
B  1, 2, 1, 2 

Je veux:

column1 column2 
A  1, 2 
B  1, 2 

Voici mon essai:

using (var command = new SqlCommand(query, conn)) 
{ 
    string Optional = ""; 

    foreach (var item in CheckBoxList1.Items.Cast<ListItem>().Where(item => item.Selected)) 
    { 
     command.Parameters.Clear(); 
     command.Parameters.AddWithValue("@planName", item.Text); 

     foreach (var item1 in CheckBoxList2.Items.Cast<ListItem>().Where(item1 => item1.Selected)) 
     { 
      { 
       Optional = Optional + item1.Text; 
      } 

     } 
     command.Parameters.AddWithValue("@optionPlan", Optional); 
     command.ExecuteNonQuery(); 
    } 
} 

Répondre

3

Avant d'entrer dans la boucle interne réinitialiser la variable en option à string.Empty

using (var command = new SqlCommand(query, conn)) 
{ 

    foreach (var item in CheckBoxList1.Items.Cast<ListItem>().Where(item => item.Selected)) 
    { 
     command.Parameters.Clear(); 
     command.Parameters.AddWithValue("@planName", item.Text); 

     // If you don't reset the Optional here the next loop on CheckBoxList1 add 
     // to the current value of Optional giving an invelid string 
     string Optional = ""; 
     foreach (var item1 in CheckBoxList2.Items.Cast<ListItem>().Where(item1 => item1.Selected)) 
     { 
       Optional = Optional + item1.Text; 
     } 
     command.Parameters.AddWithValue("@optionPlan", Optional); 
     command.ExecuteNonQuery(); 
    } 
} 
+0

Merci beaucoup Monsieur! – user3345212