MySQL Daten aus der DataGridView löschen per Button

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von ctextrem.

    MySQL Daten aus der DataGridView löschen per Button

    Hallo,
    Ich habe eine DataGridView und möchte, wenn ich es ausgewählt habe, per Button klick den Eintrag aus der MySQL Datenbank löschen.
    Sodass wenn ich ein Eintrag hinzugefügt habe es in der Software auswählen kann aus der DataGridView und dann auf den Button Löschen klicke.
    Am besten du lädst dir die Datenbank in ein typ. Dataset, (für Performance und nicht unnötig Ressourcen zu verschwenden) lädst dieses Dataset in ein Gridview, wo du dann deine Änderungen vornehmen kannst und beim Schließen der Form oder per Klick auf ein Button wird diese wieder zurück in die Datenbank geladen. Schau dir dazu dieses Tutorial von @ErfinderDesRades an: Klick mich!

    und für dein obiges Problem. Ich würde ermitteln über die Select funktion welche Zeile ausgewählt ist und diese Dann löschen über die Remove methode.

    so müsste es ungefähr aussehen:

    VB.NET-Quellcode

    1. Datagriedview1.Line.Remove(Datagriedview1.SelectedLine)


    aber bin mir da nicht sicher, hab mir das so gerade aus dem Kopf gemacht
    nee, aus dem DGV gibts dabei nix zu löschen.
    Löschen sollte man aus der DataTable.
    Bzw einfach dei BindingSource ihnren Job machen lassen:

    VB.NET-Quellcode

    1. myBindingSource.RemoveCurrent()
    und weg ist die böse DataRow ;)
    Aber es ist noch einfacher - und so ists auch im Tut gezeigt: Man kann im DGV die ganze Row markieren, und dann Entf drücken - ein Extra-Button ist garnet erforderlich.

    (Also das ist nicht explizit "gezeigt", sondern das ist einfach das Verhalten der Beispiel-Solution des Tuts)
    Den DataAdapter benutze ich nicht. Für die MySQL Verbindung verwende ich folgendes:

    VB.NET-Quellcode

    1. ​Imports MySql.Data.MySqlClient
    2. Public Class Kunden_Verwaltung
    3. Private Sub Kunden_Verwaltung_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    4. Verwaltung.Enabled = True
    5. End Sub
    6. Private Sub Kunden_Verwaltung_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. Dim conn As MySqlConnection
    8. conn = New MySqlConnection
    9. conn.ConnectionString = "server=" + My.Settings.MySQLServer + ";uid=" + My.Settings.MySQLBenutzer + ";pwd=" + My.Settings.MySQLPasswort + ";database=kundeadd;"
    10. Try
    11. conn.Open()
    12. Catch myerror As Exception
    13. MsgBox("Keine Verbindung zur Datenbank!")
    14. End Try
    15. Dim SDA As New MySqlDataAdapter
    16. Dim dbDataSet As New DataTable
    17. Dim bSource As New BindingSource
    18. Dim COMMAND As New MySqlCommand
    19. Try
    20. Dim Query As String
    21. Query = "SELECT * FROM kundeadd"
    22. COMMAND = New MySqlCommand(Query, conn)
    23. SDA.SelectCommand = COMMAND
    24. SDA.Fill(dbDataSet)
    25. bSource.DataSource = dbDataSet
    26. DataGridView1.DataSource = bSource
    27. SDA.Update(dbDataSet)
    28. conn.Close()
    29. Catch ex As Exception
    30. MessageBox.Show(ex.Message)
    31. Finally
    32. conn.Dispose()
    33. End Try
    34. End Sub
    35. Private Sub Suchen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Suchen.Click
    36. Dim conn As MySqlConnection
    37. conn = New MySqlConnection
    38. conn.ConnectionString = "server=" + My.Settings.MySQLServer + ";uid=" + My.Settings.MySQLBenutzer + ";pwd=" + My.Settings.MySQLPasswort + ";database=kundeadd;"
    39. Try
    40. conn.Open()
    41. Catch myerror As Exception
    42. MsgBox("Keine Verbindung zur Datenbank!")
    43. End Try
    44. Dim SDA As New MySqlDataAdapter
    45. Dim dbDataSet As New DataTable
    46. Dim bSource As New BindingSource
    47. Dim COMMAND As New MySqlCommand
    48. If Vorname.Checked = True Then
    49. Try
    50. Dim Query As String
    51. Query = "SELECT * FROM kundeadd WHERE Vorname LIKE '" & TextBox1.Text & "'"
    52. COMMAND = New MySqlCommand(Query, conn)
    53. SDA.SelectCommand = COMMAND
    54. SDA.Fill(dbDataSet)
    55. bSource.DataSource = dbDataSet
    56. DataGridView1.DataSource = bSource
    57. SDA.Update(dbDataSet)
    58. conn.Close()
    59. Catch ex As Exception
    60. MessageBox.Show(ex.Message)
    61. Finally
    62. conn.Dispose()
    63. End Try
    64. End If
    65. If Nachname.Checked = True Then
    66. Try
    67. Dim Query As String
    68. Query = "SELECT * FROM kundeadd WHERE Nachname LIKE '" & TextBox1.Text & "'"
    69. COMMAND = New MySqlCommand(Query, conn)
    70. SDA.SelectCommand = COMMAND
    71. SDA.Fill(dbDataSet)
    72. bSource.DataSource = dbDataSet
    73. DataGridView1.DataSource = bSource
    74. SDA.Update(dbDataSet)
    75. conn.Close()
    76. Catch ex As Exception
    77. MessageBox.Show(ex.Message)
    78. Finally
    79. conn.Dispose()
    80. End Try
    81. End If
    82. If Straße.Checked = True Then
    83. Try
    84. Dim Query As String
    85. Query = "SELECT * FROM kundeadd WHERE Straße LIKE '" & TextBox1.Text & "'"
    86. COMMAND = New MySqlCommand(Query, conn)
    87. SDA.SelectCommand = COMMAND
    88. SDA.Fill(dbDataSet)
    89. bSource.DataSource = dbDataSet
    90. DataGridView1.DataSource = bSource
    91. SDA.Update(dbDataSet)
    92. conn.Close()
    93. Catch ex As Exception
    94. MessageBox.Show(ex.Message)
    95. Finally
    96. conn.Dispose()
    97. End Try
    98. End If
    99. If Benutzername.Checked = True Then
    100. Try
    101. Dim Query As String
    102. Query = "SELECT * FROM kundeadd WHERE Benutzername LIKE '" & TextBox1.Text & "'"
    103. COMMAND = New MySqlCommand(Query, conn)
    104. SDA.SelectCommand = COMMAND
    105. SDA.Fill(dbDataSet)
    106. bSource.DataSource = dbDataSet
    107. DataGridView1.DataSource = bSource
    108. SDA.Update(dbDataSet)
    109. conn.Close()
    110. Catch ex As Exception
    111. MessageBox.Show(ex.Message)
    112. Finally
    113. conn.Dispose()
    114. End Try
    115. End If
    116. If PLZ.Checked = True Then
    117. Try
    118. Dim Query As String
    119. Query = "SELECT * FROM kundeadd WHERE PLZ LIKE '" & TextBox1.Text & "'"
    120. COMMAND = New MySqlCommand(Query, conn)
    121. SDA.SelectCommand = COMMAND
    122. SDA.Fill(dbDataSet)
    123. bSource.DataSource = dbDataSet
    124. DataGridView1.DataSource = bSource
    125. SDA.Update(dbDataSet)
    126. conn.Close()
    127. Catch ex As Exception
    128. MessageBox.Show(ex.Message)
    129. Finally
    130. conn.Dispose()
    131. End Try
    132. End If
    133. If Ort.Checked = True Then
    134. Try
    135. Dim Query As String
    136. Query = "SELECT * FROM kundeadd WHERE Ort LIKE '" & TextBox1.Text & "'"
    137. COMMAND = New MySqlCommand(Query, conn)
    138. SDA.SelectCommand = COMMAND
    139. SDA.Fill(dbDataSet)
    140. bSource.DataSource = dbDataSet
    141. DataGridView1.DataSource = bSource
    142. SDA.Update(dbDataSet)
    143. conn.Close()
    144. Catch ex As Exception
    145. MessageBox.Show(ex.Message)
    146. Finally
    147. conn.Dispose()
    148. End Try
    149. End If
    150. If Bundesland.Checked = True Then
    151. Try
    152. Dim Query As String
    153. Query = "SELECT * FROM kundeadd WHERE Bundesland LIKE '" & TextBox1.Text & "'"
    154. COMMAND = New MySqlCommand(Query, conn)
    155. SDA.SelectCommand = COMMAND
    156. SDA.Fill(dbDataSet)
    157. bSource.DataSource = dbDataSet
    158. DataGridView1.DataSource = bSource
    159. SDA.Update(dbDataSet)
    160. conn.Close()
    161. Catch ex As Exception
    162. MessageBox.Show(ex.Message)
    163. Finally
    164. conn.Dispose()
    165. End Try
    166. End If
    167. End Sub
    168. Private Sub Löschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Löschen.Click
    169. MsgBox("Diese Funktion ist noch nicht verfügbar. Bitte warten sie auf ein Update. Vielen Dank", MsgBoxStyle.OkOnly, "Funktioniert noch nicht")
    170. End Sub
    171. Private Sub Bearbeiten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bearbeiten.Click
    172. MsgBox("Diese Funktion ist noch nicht verfügbar. Bitte warten sie auf ein Update. Vielen Dank", MsgBoxStyle.OkOnly, "Funktioniert noch nicht")
    173. End Sub
    174. End Class
    Dein Code ist in vielerlei hinsicht zu bemängeln.
    Ich hab ihn mal komplett neu gemacht, und ausserdem die Rück-Speicher-Funktionalität hinzugefügt.
    Also du müsstest einen Button hinzufügen, und "btSpeichern" benennen.

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports MySql.Data.MySqlClient
    3. Public Class Kunden_Verwaltung
    4. Private _Table As New DataTable
    5. Private _Adp As MySqlDataAdapter
    6. Private _cmdSelectAll, _cmdQuery1 As MySqlCommand
    7. Private Sub Kunden_Verwaltung_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    8. Verwaltung.Enabled = True
    9. End Sub
    10. Private Sub Kunden_Verwaltung_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    11. Dim conn As New MySqlConnection("server=" + My.Settings.MySQLServer + ";uid=" + My.Settings.MySQLBenutzer + ";pwd=" + My.Settings.MySQLPasswort + ";database=kundeadd;")
    12. _cmdSelectAll = New MySqlCommand("SELECT * FROM kundeadd", conn)
    13. _Adp = New MySqlDataAdapter(_cmdSelectAll)
    14. Dim builder = New MySqlCommandBuilder(_Adp)
    15. _cmdQuery1 = New MySqlCommand("SELECT * FROM kundeadd", conn)
    16. _cmdQuery1.Parameters.Add("@p", MySqlDbType.String)
    17. _Adp.Fill(_Table)
    18. Dim bs = New BindingSource With {.DataSource = _Table}
    19. DataGridView1.DataSource = bs
    20. End Sub
    21. Private Sub Suchen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Suchen.Click
    22. _cmdQuery1.CommandText = "SELECT * FROM kundeadd WHERE Vorname LIKE '@p'"
    23. _cmdQuery1.Parameters("@p").Value = TextBox1.Text
    24. _Adp.SelectCommand = _cmdQuery1
    25. _Adp.Fill(_Table)
    26. If Nachname.Checked Then
    27. _cmdQuery1.CommandText = _cmdQuery1.CommandText.Replace("Vorname", "Nachname")
    28. ElseIf Straße.Checked Then
    29. _cmdQuery1.CommandText = _cmdQuery1.CommandText.Replace("Vorname", "Straße")
    30. ElseIf BenutzerName.Checked Then
    31. _cmdQuery1.CommandText = _cmdQuery1.CommandText.Replace("Vorname", "PLZ")
    32. ElseIf Ort.Checked Then
    33. _cmdQuery1.CommandText = _cmdQuery1.CommandText.Replace("Vorname", "Ort")
    34. ElseIf Bundesland.Checked Then
    35. _cmdQuery1.CommandText = _cmdQuery1.CommandText.Replace("Vorname", "Bundesland")
    36. End If
    37. _Adp.Fill(_Table)
    38. End Sub
    39. Private Sub btSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSpeichern.Click
    40. 'Änderungen egal welcher Art, die im DGV vorgenommen wurden, werden jetzt in die DB geschrieben.
    41. _Adp.Update(_Table)
    42. End Sub
    43. End Class
    Ansonsten ist gut möglich, dass du dein bisherigen Code einfach komplett durch diesen hier ersetzen kannst, und tut bereits, was es soll.
    (Aber sicher kann man da erst hinterher sein.)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ich habe ein Button hinzugefügt und auch so benannt. Den alten Code habe ich gelöscht und den neuen von ErfinderDesRades eingefügt.
    Doch es kommt eine Fehlermeldung bei dieser Zeile:

    VB.NET-Quellcode

    1. Private Sub btSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSpeichern.Click
    2. 'Änderungen egal welcher Art, die im DGV vorgenommen wurden, werden jetzt in die DB geschrieben.
    3. _Adp.Update(_Table)
    4. End Sub

    Bitte helft mir beim Speichern der Datenbank !
    Danke im voraus !
    wie lautet denn die Fehlermeldung?

    und oft kann man auch unter "Details angucken" Details angucken, und bei den Details ist die InnerException - wenn vorhanden - wichtig. Und evtl. auch die Inner-Inner-Exception - das kann (extrem selten) noch weiter verschachtelt sein.

    Geht denn das Befüllen?
    Und geht auch das Befüllen mit der Filter-Funktion?
    Den Eintrag hinzufügen mache ich mache ich mit einer andere Form, die ich in der Software hinzugefügt habe und das Funktioniert. Wie bekomme ich das den hin, das es gelöscht wird ?
    Die Verbindung zum Sever aus deine Code funktioniert. Das Filtern funktioniert nicht, kommt aber auch keine Meldung. Und das Speichern funktioniert auch nicht. Das andere alles funktioniert aus deinem Code, wie mit der Verbindung zur Datenbank.
    jo, möglicherweise zeile#26, muss heissen:

    VB.NET-Quellcode

    1. _cmdQuery1.CommandText = "SELECT * FROM kundeadd WHERE Vorname LIKE @p"
    Das ist ja einer der Vorzüge bei DbParametern, dass man nicht mehr herum-Quoten muss.

    stoneear schrieb:

    Wie bekomme ich das den hin, das es gelöscht wird ?
    Aber das hab ich doch schon beantwortet, und das kannste in dem Bildle von dir doch nachlesen: Deine Db-Tabelle hat keinen Primkey, also kannst du zwar abrufen, und auch zufügen, du kannst aber keinen Datensatz gezielt ansprechen, ob nun zum löschen oder zum updaten.
    Okay danke,
    Gibt es den keine möglichkeit es irgendwie aus der DB zu löschen mit ein Code.
    Und wie erstelle ich so ein Primekey ?