2017-03-20 4 views
0

Ich versuche, einen Eintrag aus dem Datagridview und der Datenbank zu entfernen. Ich habe es so, dass es die Zeile aus der Datenrasteransicht entfernt, aber es auch nicht aus der Datenbank löschen kann. Hier ist mein Code, den ich an Ort und Stelle habe:Löschen einer Zeile in einer Datenbank aus datagridview C#

private void listBtn_Click(object sender, EventArgs e) 
    { 
     MySqlDataAdapter mysqldatadapter = new MySqlDataAdapter("select id, username from members ORDER BY id", new MySqlConnection(conn.connectionString)); 

     mysqldatadapter.Fill(ds); 

     dataGridView.DataSource = ds.Tables[0]; 

     listBtn.Enabled = false; 
    } 


    private void btnDelete_Click(object sender, EventArgs e) 
    { 
     using (MySqlConnection dbConn = new MySqlConnection(conn.connectionString)) 
     { 
      dbConn.Open(); 

      for (int i = 0; i < dataGridView.Rows.Count; i++) 
      { 
       DataGridViewRow row = dataGridView.Rows[i]; 

       if (row.Selected == true) 
       { 
        dataGridView.Rows.RemoveAt(i); 

        MySqlCommand cmd = dbConn.CreateCommand(); 
        cmd.CommandText = "DELETE FROM members WHERE id = " + i; 

        try 
        { 
         cmd.ExecuteNonQuery(); 
        } 
        catch (MySqlException ex) 
        { 
         MessageBox.Show(ex.Message); 
        } 
       } 
      } 

      dbConn.Close(); 
     } 
    } 

Ich bin ratlos, jede Hilfe würde geschätzt werden.

Danke!

Update - Gibt es eine Möglichkeit, den Wert einzelner Zellen zu nehmen, die an den mysql-Befehl übergeben werden? Zum Beispiel, greifen die ID?

+0

Schwer zu sagen, aber wahrscheinlich Ihre Werte für 'I' nicht die ID-Spalte in der' members' übereinstimmen Tabelle. – dave

+0

das habe ich mir gedacht. Gibt es eine Möglichkeit, den Wert der Zelle zu erhalten? – user2101411

Antwort

0

Ihre Werte für i stimmen wahrscheinlich nicht mit den Feldern id in der Tabelle member überein.

Sie müssen wahrscheinlich diese Zeile ändern:

cmd.CommandText = "DELETE FROM members WHERE id = " + i; 

zu

cmd.CommandText = "DELETE FROM members WHERE id = " + row.cells[id.Index].ToString(); 
+0

Wenn ich das ändere, bekomme ich eine Fehlermeldung "Kann Indizierung mit [] nicht auf einen Ausdruck vom Typ 'DataGridViewRow' anwenden. – user2101411

+0

@bashis danke Ich denke, du hast recht. Schon eine Weile seit ich DataGridViews – dave

+1

@dave verwendet habe stellt sich heraus, es ist ein bisschen schwieriger als das: http://stackoverflow.com/questions/13436553/how-to-get-cell-value-of-datagridview-by-column-name/ – bashis

Verwandte Themen