DataRow hinzufügen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    DataRow hinzufügen

    Hallo !

    Das Hinzufügen einer Zeile mit meine Fertigungsdaten zur einer Datenbankdatei wurde ja schon oft hier dokumentiert, trotzdem funktioniert es bei mir einfach nicht.

    Ich habe lokal mit dem DatenbankDesigner eine Datenbankdatei erzeugt und ein Gridview auf mein Formular gezogen.
    Soweit funktioniert alles prima.

    Nun möchte ich aber per Programm eine Zeile hinzufügen.
    Frei nach MSDNwollte ich es so machen:

    VB.NET-Quellcode

    1. Dim newCustomersRow As ZF_DatenDataSet_1.FertigungsdatenRow
    2. newCustomersRow = ZF_DatenDataSet_1.FertigungsdatenRow.NewFertigungsdatenRow()
    3. _ZF_DatenDataSet_1.FertigungsdatenRow.Rows.Add(newCustomersRow)


    Das geht aber nicht, da weder NewFertigungsdatenRow() noch FertigungsdatenRow.Rows existieren.

    Was nun ???

    Vielen Dank

    VB.NET-Quellcode

    1. ZF_DatenDataSet_1.Fertigungsdaten.AddFertigungsdatenRow('hier kommen die typisierten Daten, entsprechend deiner Tabelle


    Ach so, MSDN hat keine Ahnung, da steht NICHTS, was dir helfen kann.

    Schau lieber, wie @ErfinderDesRades es in seinen Videos macht:

    [VB.NET] die vier Views auf Video

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sonne75“ ()

    Zufrüh gefreut, geht noch nicht ganz.

    Bisher habe ich das so verstanden, dass die Einträge sofort in der DB gespeichert werden, bzw beim Programmstart wieer ausgelesen werden.

    Das ist bei mir nicht der FAll.
    Mein DataGridView ist zwar voll mit Daten, bleiben aber nicht erhalten.

    VB.NET-Quellcode

    1. 'Eintrag in Datenbank vorbereiten
    2. Dim MyNewRow As _ZF_DatenDataSet_1.FertigungsdatenRow
    3. MyNewRow = Form_Datenanalyser._ZF_DatenDataSet_1.Fertigungsdaten.NewFertigungsdatenRow
    4. '... Datenaufbereitung ...
    5. 'Zeile hinzufüge
    6. Form_Datenanalyser._ZF_DatenDataSet_1.Fertigungsdaten.Rows.Add(MyNewRow)
    7. Form_Datenanalyser.FertigungsdatenDataGridView.EndEdit()
    8. Form_Datenanalyser._ZF_DatenDataSet_1.Fertigungsdaten.AcceptChanges()

    Auch wenn ich über den Bindingnavigator Daten eintrage und speichere sind sie anschließend, nach dem Neustart weg.

    myownshadow schrieb:

    Bisher habe ich das so verstanden, dass die Einträge sofort in der DB gespeichert werden

    Wenn du mit einer DB arbeitest, kannst du so speichern - z.B. beim Beenden der Form:

    VB.NET-Quellcode

    1. Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    2. Me.Validate()
    3. Me.MeineBindingSource.EndEdit()
    4. If Me.MeinDataset.HasChanges Then Me.TableAdapterManager.UpdateAll(Me.MeinDataset)
    5. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    myownshadow schrieb:

    Bisher habe ich das so verstanden, dass die Einträge sofort in der DB gespeichert werden, bzw beim Programmstart wieer ausgelesen werden.
    vlt. hast du noch garnet verstanden, dass du ein typisiertes Dataset hast, und was das ist.
    Dassis nämlich ein Cache, wo man Daten aus der DB einfüllen kann.
    Und wo man auch codeseitig Datensätze zufügen kann (codeseitig bedeutet: ins Dataset - nicht ins DatagridView)
    Und wo auch der User Datensätze zufügen kann - etwa per DatagridView.
    Die Controls sind ans Dataset gebunden, sodass was im Dataset geschieht, sofort auch inne Controls präsentiert wird - und umgekehrt.

    Ein Databinding zw. Dataset und DB aber gibt es nicht, also befüllen und rückspeichern der Änderungen sind explizit zu veranlassen, ob nun mit TableAdapterManager.UpdateAll(Dataset) oder mit Dataset.WriteXml()

    Dassis wichtig, sich klarzumachen: Das typisierte Dataset ist ein Cache, in dem man fast die gesamte eigentliche Datenverarbeitung durchführt - unabhängig vonne DB. Änderungen werden dann mit einem Rutsch optimal effizient rückgespeichert.
    Ja, verstanden, das GridView zeigt ja nur an, was sich in der Datenbank befindet.

    Nun wollte ich die Zeilen auch wieder löschen und versuchte das umgekehrte Verfahren anzuwenden.
    Statt Rows.Add eben Rows.Remove.

    Im GridView werden auch alle Zeilen gelöscht. Aber wenn ich das Programm neu starte sind sie wiede da.
    Ich arbeite doch nun im DataSet, nicht wahr ?!
    Verstehen tue ich auch nicht, das HasChanges beim Entfernen immer auf False ist, während es beim Hinzufügen auf True geht.

    VB.NET-Quellcode

    1. Sub datensaetze_loeschen()
    2. ' Alle Zeilen durchgehen
    3. Dim myDelRow As _ZF_DatenDataSet_1.FertigungsdatenRow
    4. Dim anzRows = Form_Datenanalyser._ZF_DatenDataSet_1.Fertigungsdaten.Rows.Count
    5. For i As Integer = 1 To anzRows
    6. myDelRow = Form_Datenanalyser._ZF_DatenDataSet_1.Fertigungsdaten.FindByLfdNr(i)
    7. If Not IsNothing(myDelRow) Then
    8. Form_Datenanalyser._ZF_DatenDataSet_1.Fertigungsdaten.Rows.Remove(myDelRow)
    9. End If
    10. 'Form_Datenanalyser.Validate()
    11. 'Form_Datenanalyser.FertigungsdatenBindingSource1.EndEdit()
    12. 'If Form_Datenanalyser._ZF_DatenDataSet_1.HasChanges Then
    13. Form_Datenanalyser.TableAdapterManager1.UpdateAll(Form_Datenanalyser._ZF_DatenDataSet_1)
    14. 'End If
    15. Next
    16. End Sub

    myownshadow schrieb:

    Ja, verstanden, das GridView zeigt ja nur an, was sich in der Datenbank befindet.
    nenn mich pingelig.
    Das DGV zeigt nicht nur an, es präsentiert auch. Damit meine ich, man kann damit die Daten nicht nur angugge, sondern auch ändern.

    Vor allem: es präsentiert nicht die Daten inne DB, sondern die Daten im typisierten Dataset - du scheinst da echtn Problem zu haben, das typisierte Dataset in den Focus deiner Aufmerksamkeit zu kriegen.
    Nicht die Controls und auch nicht die Datenbank, nein, das typisierte Dataset ist der Ort, wo die Daten zur Verarbeitung bereitstehen.


    Was du da zu löschen versuchst, und ist mir unklar, und eine Methode .FindByLfdNr läßt Datenmodell-Fehler befürchten.
    Und wie du in Form_Datenanalyser hineingrabschst läßt vermuten, dass dir auch der Unterschied zw. Klasse und Objekt nicht klar ist, gugge VeryBasics und [VB 2010] Instanziierung von Forms und Aufruf von Dialogen

    Mehr kannman zu so hingeklatschten Code nicht sagen - ich weiß ja nicht, wasser tun soll.
    Datensätze löschen kann man eiglich besser mit DataTable.Clear, oder Dataset.Clear ;).

    Ansonsten bedient man sich besser der BindingSources, um zu ermitteln, was der User grad angewählt hat.


    Ah - dass dir die Datensätze nicht als gelöscht erscheinen liegt oft an der Einstellung der eingebundenen Datenbank-Datei: Ins Ausgabeverzeichnis kopieren: immer