2017-10-17 17 views
1

J'ai un datagridview dans lequel j'ajoute quelques colonnes, La première colonne a la case à cocher quand j'essaie de sélectionner des multirows avec la case à cocher et le supprimer, seulement supprime une ligne à chaque fois même lorsque je sélectionne plusieurs lignes.C# - Impossible de supprimer plusieurs lignes dans datagridview avec la base de données sqlite

Le code i utilise pour remplir le datagridview

SQLiteDataAdapter da = new SQLiteDataAdapter("Select * From Data", con); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 

     foreach (DataRow item in dt.Rows) 
     { 
      int n = dataGridView1.Rows.Add(); 
      dataGridView1.Rows[n].Cells[0].Value = "false"; 
      dataGridView1.Rows[n].Cells[1].Value = item["id"].ToString(); 
      dataGridView1.Rows[n].Cells[2].Value = item["car_num"].ToString(); 
      dataGridView1.Rows[n].Cells[3].Value = item["customer"].ToString(); 
      dataGridView1.Rows[n].Cells[4].Value = item["driver"].ToString(); 
      dataGridView1.Rows[n].Cells[5].Value = item["first"].ToString(); 
      dataGridView1.Rows[n].Cells[6].Value = item["second"].ToString(); 
      dataGridView1.Rows[n].Cells[7].Value = item["sum"].ToString(); 
      dataGridView1.Rows[n].Cells[8].Value = item["price"].ToString(); 
      dataGridView1.Rows[n].Cells[9].Value = item["date1"].ToString(); 
      dataGridView1.Rows[n].Cells[10].Value = item["date2"].ToString(); 
      dataGridView1.Rows[n].Cells[11].Value = item["city"].ToString(); 
      dataGridView1.Rows[n].Cells[12].Value = item["type"].ToString(); 

     } 

Le code-je utiliser pour supprimer

private void bDelete_Click(object sender, EventArgs e) 
    { 
     foreach (DataGridViewRow item in dataGridView1.Rows) 
     { 

       if (bool.Parse(item.Cells[0].Value.ToString())) 
      { 
       if (MessageBox.Show("Are you sure you want to delete these data ? ", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes) 
       { 
        con.Open(); 
       SQLiteCommand cmd = new SQLiteCommand("Delete From Data Where id='"+item.Cells[1].Value.ToString()+"'", con); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 
       SQLiteDataAdapter da = new SQLiteDataAdapter("Select * From Data", con); 
       DataTable dt = new DataTable(); 
       dataGridView1.Rows.Clear(); 

       da.Fill(dt); 
       MessageBox.Show("Success"); 
      } 

     } 
     } 
+0

soulève-t-il une exception ou rien ne se passe-t-il? –

+0

La boîte de message s'affiche-t-elle plusieurs fois si vous avez sélectionné plusieurs lignes et que vous cliquez sur Supprimer? – MisterMystery

+0

Où est-ce que vous remplissez 'dataGridView1' après l'avoir effacé dans la méthode delete? – MisterMystery

Répondre

0

Je pense que le problème est dû à dataGridView1.Rows.Clear(); dans la boucle foreach. Comme la boucle foreach se répète sur (DataGridViewRow item in dataGridView1.Rows), il ne reste plus rien à parcourir après l'effacement des lignes.

+0

j'ai supprimé dataGridView1.Rows.Clear(); et maintenant le message apparaît plusieurs fois, je ne peux pas le faire une fois? –

+0

Vous devez déplacer l'instruction if avec la boîte de message en dehors de la boucle foreach. – MisterMystery

+0

Ne rechargez pas non plus la datatable de la base de données tant que la boucle foreach n'est pas terminée. Vous voulez supprimer toutes les lignes sélectionnées, puis remplir la datatable. – MisterMystery