Manuelle Datenbindung an Textboxen und Datagridview, Eingabefelder werden nicht mehr gelöscht

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Manuelle Datenbindung an Textboxen und Datagridview, Eingabefelder werden nicht mehr gelöscht

    Hallo,
    habe als Anfänger in VB-2015 eine Eingabemaske mit einigen TextBoxen und einem DGV erstellt. TextBoxen und DGV wurden manuell mit einer Access-Datenbank angebunden.
    Nach einigen erfolgreich eingegebenen Datensätze werden auf einmal die Eingabetextboxen nicht mehr geleert, woran kann das liegen?
    Habe danach das selbe nochmals erstellt, bei ca. 5-7 Datensatzeingabe werden wieder die TextBoxen nicht mehr gelehrt.
    Weiss jemand Rat?

    VB.NET-Quellcode

    1. da.MissingSchemaAction = MissingSchemaAction.AddWithKey
    2. Dim cb As New OleDbCommandBuilder(da)
    3. 'Ausführen der SQL-Abfrage und zuweisen der BindingSource
    4. dt = New DataTable("Tanken")
    5. conn.Open()
    6. da.Fill(dt)
    7. conn.Close()
    8. bs.DataSource = dt
    9. dgTanken.DataSource = bs
    10. lblID.DataBindings.Add("Text", bs, "ID")
    11. txtLand.DataBindings.Add("Text", bs, "Land")
    12. txtPlz.DataBindings.Add("Text", bs, "Plz")
    13. txtOrt.DataBindings.Add("Text", bs, "Ort")
    14. Private Sub cmdNeu_Click(sender As Object, e As EventArgs) Handles cmdNeu.Click
    15. bs.AddNew()
    16. txtDatum.Focus()
    17. End Sub


    *Topic verschoben* ~NoFear23m

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Nofear23m“ ()

    Willkommen im Forum.
    Ich vermute mal, dass der 1. Codeteil hinter einem LadeButton versteckt ist.
    Da ich nicht mit echten Datenbanken arbeite, habe ich das nur mit einem tDS nachgestellt. Aber vom Prinzip her dürfte es auf's Gleiche rauskommen. Konnte das von Dir beschriebene Verhalten aber nicht nachstellen. Bei mir läuft fast* alles rund bzw. wie erhofft/gewünscht. Sind da noch weitere DB-Zugriffe, die wir nicht kennen? Nicht, dass irgendwo automatisch noch ein DB-Update erfolgen soll, aber die DB ablehnt oder sowas? Oder ist das Gezeigte wirklich der gesamte Code?

    *wenn noch nix in der DataTable drinsteht, wird die erste Datenzeile, die man anlegt, für die SPaltenüberschriften verwendet.

    btw: Bitte CodeTags nicht vergessen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo, besten Dank für deine Antwort.
    In der Datenbank waren schon Datensätze vorhanden.
    Hier der komplette Code.

    VB.NET-Quellcode

    1. Public Class Form1
    2. 'Erforderliche Objektreferenzen
    3. Private da As OleDbDataAdapter = Nothing
    4. Private dt As DataTable = Nothing
    5. 'Die BindingSource verbindet die Anzeige-Felder mit der DataTable
    6. Private bs As New BindingSource()
    7. Protected Overrides Sub OnLoad(ByVal e As EventArgs)
    8. Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Test2015\TankenTest.accdb"
    9. Dim conn As New OleDbConnection(connStr)
    10. Dim selStr As String = "SELECT * FROM Tanken"
    11. da = New OleDbDataAdapter(selStr, conn)
    12. 'folgende Zeile wird benötigt, um den Autowert der PrimaryKey zu erhöhen
    13. da.MissingSchemaAction = MissingSchemaAction.AddWithKey
    14. 'Verwendung eines OleDBCommandBuilder
    15. Dim cb As New OleDbCommandBuilder(da)
    16. 'Ausführen der SQL-Abfrage und zuweisen der BindingSource
    17. dt = New DataTable("Tanken")
    18. conn.Open()
    19. da.Fill(dt)
    20. conn.Close()
    21. bs.DataSource = dt
    22. dgTanken.DataSource = bs
    23. lblTankenID.DataBindings.Add("Text", bs, "TankenID")
    24. txtLand.DataBindings.Add("Text", bs, "Land")
    25. txtPlz.DataBindings.Add("Text", bs, "Plz")
    26. txtOrt.DataBindings.Add("Text", bs, "Ort")
    27. txtLiter.DataBindings.Add("Text", bs, "Liter")
    28. txtKmStand.DataBindings.Add("Text", bs, "KmStand")
    29. chkPkw.DataBindings.Add("Checked", bs, "Pkw")
    30. 'Datum und Betrag müssen separat behandelt werden
    31. Dim b1 As New Binding("Text", bs, "Datum")
    32. AddHandler b1.Format, New ConvertEventHandler(AddressOf Me.DateToDateString)
    33. AddHandler b1.Parse, New ConvertEventHandler(AddressOf Me.DateStringToDate)
    34. txtDatum.DataBindings.Add(b1)
    35. 'Währungsformatierung
    36. Dim b2 As New Binding("Text", bs, "Betrag")
    37. AddHandler b2.Format, New ConvertEventHandler(AddressOf Me.DecToCurrString)
    38. txtBtrag.DataBindings.Add(b2)
    39. MyBase.OnLoad(e)
    40. End Sub
    41. 'Datum
    42. Private Sub DateToDateString(ByVal sender As Object, ByVal e As ConvertEventArgs) 'Datatable => Anzeige
    43. Try
    44. e.Value = Convert.ToDateTime(e.Value).ToString("dd.MM.yyyy")
    45. Catch ex As Exception
    46. End Try
    47. End Sub
    48. Private Sub DateStringToDate(ByVal sender As Object, ByVal e As ConvertEventArgs) 'Anzeige => Datatable
    49. e.Value = Convert.ToDateTime(e.Value)
    50. End Sub
    51. 'Formatieren des Betrags als Währung
    52. Private Sub DecToCurrString(ByVal sender As Object, ByVal e As ConvertEventArgs)
    53. Try
    54. e.Value = Convert.ToDecimal(e.Value).ToString("c")
    55. Catch ex As Exception
    56. End Try
    57. End Sub
    58. Private Sub CurrStringToDec(ByVal sender As Object, ByVal e As ConvertEventArgs)
    59. e.Value = Convert.ToDecimal(e.Value)
    60. End Sub
    61. Private Sub cmdErster_Click(sender As Object, e As EventArgs) Handles cmdErster.Click
    62. bs.MoveFirst()
    63. End Sub
    64. Private Sub cmdBeenden_Click(sender As Object, e As EventArgs) Handles cmdBeenden.Click
    65. Me.Close()
    66. End Sub
    67. Private Sub cmdZurück_Click(sender As Object, e As EventArgs) Handles cmdZurück.Click
    68. bs.MovePrevious()
    69. End Sub
    70. Private Sub cmdWeiter_Click(sender As Object, e As EventArgs) Handles cmdWeiter.Click
    71. bs.MoveNext()
    72. End Sub
    73. Private Sub cmdLetzter_Click(sender As Object, e As EventArgs) Handles cmdLetzter.Click
    74. bs.MoveLast()
    75. End Sub
    76. Private Sub cmdNeu_Click(sender As Object, e As EventArgs) Handles cmdNeu.Click
    77. bs.AddNew()
    78. End Sub
    79. Private Sub cmdLöschen_Click(sender As Object, e As EventArgs) Handles cmdLöschen.Click
    80. bs.RemoveCurrent()
    81. End Sub
    82. Private Sub cmdSpeichern_Click(sender As Object, e As EventArgs) Handles cmdSpeichern.Click
    83. bs.EndEdit()
    84. da.Update(dt)
    85. End Sub
    86. End Class


    :)

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Pit“ ()

    CodeTags: Guckst Du hier. Bitte erstmal Deinen Beitrag nachbearbeiten. Dann geht's weiter.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.