Autor Beitrag
cubx
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 23.07.11 04:51 
Hallo,

habe ein Problem. Ich versuche schon seit Tagen Datensätze oder Zeilen aus einem Datagridview, welches Daten aus meiner MySQL Datenbank darstellt zu löschen. Es soll im DGV per Maus eine Zeile angeklickt werden können, um diese ausgewählte Zeile dann per Button zu löschen. Siehe folgenden Code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
        public void delete_row(string myConnectionString)
        {
            try
            {
                if (myConnectionString == "")
                {
                    myConnectionString = "Database=jericho_db;Data Source=localhost;" +
                                          "UID=root;Password=password";
                }

                MySqlConnection myConnection = new MySqlConnection(myConnectionString);                            
                MySqlCommand myCommand = new MySqlCommand("Delete from person where name=?name  ", myConnection);
              
                myCommand.Parameters.AddWithValue("?name", tbl_view.SelectedRows);
             
                myConnection.Open();
                myCommand.ExecuteNonQuery();
                myCommand.Connection.Close();
                MessageBox.Show("Data deleted !");
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                MessageBox.Show(ex.Message, "MySQL Exception",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Unknown Exception",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            // Aktualisiert die Tabelle gleichzeitig
            MySqlConnection connection = new MySqlConnection(myConnectionString);
            MySqlDataAdapter da = new MySqlDataAdapter("Select * from person", connection);
            DataTable data = new DataTable();
            da.Fill(data);
            tbl_view.DataSource = data;
            tbl_view.Show();
            txtbox_id.Text = "";
        }

Wenn ich myCommand.Parameters.AddWithValue("?name", txtbox_name) probiere funktioniert es ohne Probleme, wenn ich den Namen in die Textbox eingebe. Der ganz Datensatz wird also gelöscht. Warum funktioniert es nicht wenn ich es so mache: myCommand.Parameters.AddWithValue("?name", tbl_view.SelectedRows);???? Kann mir bitte einer Helfen, wenn möglich mit Code Beispiel.

Vielen Dank!

cubx

Moderiert von user profile iconTh69: C#-Tags hinzugefügt sowie kleine Rechtschreibfehler bereinigt (Wörterbuch im FF ist da recht hilfreich)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 23.07.11 10:47 
Hallo cubx :welcome:

ich habe deinen Beitrag im Forum myCSharp www.mycsharp.de/wbb2...d.php?threadid=97063 gestern schon verfolgt und kann dir eigentlich auch nicht mehr schreiben als FZelle es schon getan hat.
Ein Forum kann kein Buch sowie die Grundlagen ersetzen.

Bisher hat es mit der TextBox einwandfrei funktioniert, weil du dort genau einen Namen angegeben hast (zumindestens wenn du txtbox_name.Text verwendest hast ;-))
Wenn du aber jetzt die Eigenschaft SelectedRows verwendest, so ist das ja eine Collection (d.h. eine Liste von mehreren Werten). Und wenn du mehrere Daten löschen willst, so benötigst du eben eine Schleife.
cubx Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 25.07.11 14:44 
Hallo, eine letzte Frage:

Ich habe es jetzt hinbekommen die gewünschte Zeile per Mausklick zu markieren und diese wird dann auch gelöscht! Leider erscheint die Zeile in der Db nach bestätigen der MSG Box wieder im DGV??? Warum, der COde müsste doch so stimmen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
MySqlConnection myConnection = new MySqlConnection(myConnectionString);
MySqlCommand myCommand = new MySqlCommand("Delete from person where id= ?id", myConnection);

foreach (DataGridViewRow row in tbl_view.SelectedRows)
{
        tbl_view.Rows.Remove(row);
}

myCommand.Parameters.AddWithValue("?id", tbl_view.SelectedRows);

myConnection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
MessageBox.Show("Data deleted !");

Oder muss ich noch eine Verbindung an die DataBindingSource stellen? Wie gehe ich jetzt weiter vor?

THX

cubx

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Di 26.07.11 09:44 
versuch den View mal zu refreshen (oder zu updaten)