Bindingsource wird nach Hinzufügen eines Datensatzes nicht aktualisiert

  • VB.NET
  • .NET (FX) 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    Bindingsource wird nach Hinzufügen eines Datensatzes nicht aktualisiert

    Ich habe ein Datagridview mit allen Notesdatenbanken.
    Diesen sollen durch ein 2. Datagridview abrechnungsrelevante Positionen (hier Anwendungen genannt) hinzugefügt werden.
    Beide Datgridviews sind an die jeweiligen Tabellen gebunden und setzen Comboboxen ein.
    Die Anzeige und Änderung im 1. Datagridview funktionieren problemlos.
    Im 2. Datagridview möchte ich die jeweiligen Anwendungen hinzufügen.
    Auch mit Me.Tbl_A_Anwendung_NotesBindingSource.addnew kam ich nicht klar, da wußte ich nicht wie ich die Felder ansprechen sollte.
    Dabei funktioniert das Datensatz hinzufügen in der Datenquelle problemlos, nur die Anzeige aktualisiert sich nicht.
    Wenn ich einen Datensatz im Datagridview lösche, das umgekehrte Bild. Er ist im Datagridview verschwunden und in der Datenbank noch vorhanden.
    Nach Neustart des Formulars sehe ich die echten Daten. Was mache ich hier falsch ?

    VB.NET-Quellcode

    1. Imports System.Windows.Forms
    2. Public Class frmNotesDB
    3. Sub New()
    4. ' Dieser Aufruf ist für den Designer erforderlich.
    5. InitializeComponent()
    6. Me.Tbl_NutzerTableAdapter.Fill(Me.DsRechnerliste_be.tbl_Nutzer)
    7. Me.Tbl_Z_NotesDBTypTableAdapter.Fill(Me.DsRechnerliste_be.tbl_Z_NotesDBTyp)
    8. Me.Tbl_AnwendungTableAdapter.Fill(Me.DsRechnerliste_be.tbl_Anwendung)
    9. Me.TblAnwendungBindingSource.Filter = "Anwendung LIKE '%Notes%' or Anwendung='Fax In'"
    10. Me.Tbl_A_Anwendung_NotesTableAdapter.Fill(Me.DsRechnerliste_be.tbl_A_Anwendung_Notes)
    11. Me.Tbl_Z_KostenstelleTableAdapter.Fill(Me.DsRechnerliste_be.tbl_Z_Kostenstelle)
    12. Me.Tbl_NotesDBTableAdapter.Fill(Me.DsRechnerliste_be.tbl_NotesDB)
    13. With Me.cboAnwendung
    14. .DataSource = Me.TblAnwendungBindingSource
    15. .DisplayMember = "Anwendung"
    16. .ValueMember = "ID_Anwendung"
    17. End With
    18. End Sub
    19. Private Sub btnSpeichern_Click(sender As Object, e As EventArgs) Handles btnSpeichern.Click
    20. Me.Validate()
    21. Me.Tbl_NotesDBBindingSource.EndEdit()
    22. Me.TableAdapterManager.UpdateAll(Me.DsRechnerliste_be)
    23. End Sub
    24. Private Sub DataGridView1_DataError(ByVal sender As Object, _
    25. ByVal e As DataGridViewDataErrorEventArgs) _
    26. Handles dgvNotesDB.DataError
    27. If (e.Context = DataGridViewDataErrorContexts.Formatting) Then
    28. Debug.Print("Zeile " & e.RowIndex & " Spalte " & e.ColumnIndex & " " & e.Context)
    29. End If
    30. e.ThrowException = False
    31. End Sub
    32. Private Sub dgvNotesDB_RowHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvNotesDB.RowHeaderMouseClick
    33. Me.Tbl_A_Anwendung_NotesBindingSource.Filter = "ID_NotesDB=" & Me.dgvNotesDB.CurrentRow.Cells(colID_NotesDB.Index).Value.ToString
    34. End Sub
    35. Private Sub cboAnwendung_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cboAnwendung.SelectionChangeCommitted
    36. Try
    37. Dim Rechnerliste As dsRechnerliste_be = DsRechnerliste_be.GetInstance
    38. Dim dtrowanwendungNotes As dsRechnerliste_be.tbl_A_Anwendung_NotesRow = DirectCast(Rechnerliste.tbl_A_Anwendung_Notes.NewRow, VertriebSO.dsRechnerliste_be.tbl_A_Anwendung_NotesRow)
    39. With dtrowanwendungNotes
    40. .ID_Anwendung = CInt(Me.cboAnwendung.SelectedValue)
    41. .ID_NotesDB = CInt(Me.dgvNotesDB.CurrentRow.Cells(colID_NotesDB.Index).Value)
    42. End With
    43. Me.Validate()
    44. Rechnerliste.tbl_A_Anwendung_Notes.Rows.Add(dtrowanwendungNotes)
    45. Rechnerliste.daA_Anwendung_Notesupdate()
    46. Me.Tbl_A_Anwendung_NotesBindingSource.ResetBindings(False)
    47. Me.dgvAnwendungNotes.DataSource = Tbl_A_Anwendung_NotesBindingSource
    48. Catch ex As Exception
    49. MessageBox.Show(ex.Message)
    50. End Try
    51. End Sub
    52. Private Sub btnLöscheAnwendungNotes_Click(sender As Object, e As EventArgs) Handles btnLöscheAnwendungNotes.Click
    53. Me.Tbl_A_Anwendung_NotesBindingSource.RemoveCurrent()
    54. Me.Tbl_A_Anwendung_NotesBindingSource.EndEdit()
    55. End Sub
    56. End Class
    jetzt habe ich hinbekommen, das er auch die neuen Werte anzeigt.
    Allerdings war folgende Zeile erforderlich.

    VB.NET-Quellcode

    1. Me.Tbl_A_Anwendung_NotesTableAdapter.Fill(Me.DsRechnerliste_be.tbl_A_Anwendung_Notes)


    Eigentlich dachte ich, das das die Bindingsource zusammen mit dem Tableadaptermanager erledigt.

    Das Löschproblem lag augenscheinlich darin, das im Tableadaptermanager die Tabelle nicht eingetragen war. Warum er diese dort außenvorgelassen hat kann ich nicht nachvollziehen.

    Schoofi schrieb:

    Was mache ich hier falsch
    Du füllst das UI mit den Daten aus der BindingSource und lösche die Daten aus der BindingSource, jedoch übernimmst du die Daten nicht in der Datenbank.

    Wenn du einen Datansatz in deiner Anwendung löschst, misst du natürlich auch den Datensatz in der Datenbank löschen
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell