Datensatz zu einem Dataset über DetailView hinzufügen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von silverbob76GE.

    Datensatz zu einem Dataset über DetailView hinzufügen

    Hallo zusammen,

    suche nun schon ne ganze Weile nach einer Lösung für mein Problem, leider konnte ich nichts finden. Ich schreibe gerade eine Anwendung in Visual Studio 2015. Die Anwendung basiert auf einem typisierten Dataset mit zwei Datatables.

    1. DataTable "Komplett": Grunddaten zu einem Auftrag, wie Kundenangaben, etc.
    2. Datatable "Komplett Mengen": Detailinformationen zur Bestellung, wie welches Produkt, Menge, Farbe, etc.

    Die Datensätze werden in zwei separaten XML-Dateien gespeichert und geladen, so weit so gut. Die DataTable "Komplett" ist über einen Fremdschlüssel mit der DataTable "Komplett Mengen" verbunden, über die Spalten "ID" zu "MengenID".
    "ID" ist ein Primärschlüssel mit AutoIncrement, "MengenID" steht auch auf Autoincrement.

    Da beide Tabellen sehr viele Spalten enthalten, habe ich mich für den Detail View entschieden, da dies doch übersichtlicher ist.

    Wenn ich die Daten lade und darstelle, kann ich ohne weiteres in der DataTable "Komplett" speichern. Nun sollen allerdings auch die Detailaganben zu dem Auftrag in der DataTable "Komplett Mengen" gespeichert werden, und da klappts net.
    Bekomme auch keine Fehlermeldung, nichts.

    Die DT "Komplett Mengen" wird im DetailView dargestellt, BindingSource ist der Foreign Key. Wenn ich ein DatagridView verwende, dann werden die Daten auch gespeichert.

    Der Code ist ja recht simpel, aber ich befürchte das ich irgendetwas vergesse oder übersehe. Der unten stehende Code funzt, wenn ich ein DatagridView nehme.
    Wenn ich im DetailView bin, gehts nicht.

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. DSAufträge.Komplett.WriteXml(akomplett)
    3. DSAufträge.Komplett_Mengen.WriteXml(mengendetails)
    4. End Sub


    Habe auch schon versucht, über eine neue Zeile hinzufügen den Datensatz zu speichern. Auch nix.

    VB.NET-Quellcode

    1. Dim neuezeile = DSAufträge.Komplett_Mengen.NewKomplett_MengenRow()
    2. neuezeile.menge = tbmenge.text
    3. ......


    Jemand ne Idde, warum ich über den DetailView den neuen Datensatz nicht speichern kann?
    definiere "DetailView".
    Bei mir ist ein DetailView eine Ansammlung von Einzel-Wert-Controls (Textbox, DatetimePicker, Label, etc), an verschiedene Properties desnselben Datensatzes gebunden - die also die Details eines Datensatzes präsentieren.
    Die Anforderung "Über den DetailView einen Datensatz speichern" ergibt so überhaupt keinen Sinn - eine Gruppe von Textboxen, DatetimePicker, Label, etc kann doch keine Datei erstellen!
    Wenn man im Daten-Explorer die Datable anklickt, kann man die Daten im Datagridview oder als einzelne Controls auf die Form ziehen.
    Ich habe da Details amgeklickt, und alle Spalten in Form von Textboxen auf meine Form gezogen, als bindingsource wähle ich (hab mehrere auf meiner Form) die Foreign Key relation. Wenn ich nun neue Daten über die Textboxen (sind ja alle datengebunden) eintrage und dann speichern will, werden die daten nicht gespeichert.

    wenn ich das über ein Datagridview mache gehts. Is halt blöd, da ich sehr viele Spalten hab und die Controls eine bessere Übersicht bieten.

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

    Also habs jetzt mal mit BindingSource.EndEdit probiert. Leider klappt das nicht. Der neue Datensatz wird nicht in der XML gespeichert.
    Seltsam ist, das ich alles was ich in die Controls der übergeordneten DataTable schreibe, gespeichert wird.

    Welche BindingSource müsste denn mit EndEdit angesprochen werden? Die mit dem Foreign Key oder die "normale".

    1. KomplettBindingSource (übergeordnetes DataTable)
    2. KomplettMengenBindingSource (untergeordnetes DataTable)
    3. FKKomplettKomplettMengenBindingsource (Foreign Key)

    Mein Layout sieht so aus:

    1. übergeordnete Tabelle mit Auftrasgsnummer im DataGridView. Die restlichen Spalten werden in einzelnen Controls dargestellt. Speichern in XML funzt. => gebunden an KomplettBindingSource
    2. Foreign Key => alle Spalten der DataTable werden in einzelnen controls dargestellt. => Datensätze werden nicht in der XML gespeichert => gebunden en an FKKomplettKomplettMengenBindingSource

    Wenn ich im DataGridView eine leere Zeile für einen neuen Datensatz anklicke, wird im ersten Moment in der "ID-Textbox" der untergeordneten DataTable eine ID erzeugt.
    Sobald ich dann aber in ein weiteres Control der untergeordneten Tabelle klicke, ist die ID weg.



    Weiß echt nicht mehr weiter. Ne Idee?
    Also habs jetzt mal mit BindingSource.EndEdit probiert. Leider klappt das nicht. Der neue Datensatz wird nicht in der XML gespeichert.
    Seltsam ist, das ich alles was ich in die Controls der übergeordneten DataTable schreibe, gespeichert wird.

    Welche BindingSource müsste denn mit EndEdit angesprochen werden? Die mit dem Foreign Key oder die "normale".

    1. KomplettBindingSource (übergeordnetes DataTable)
    2. KomplettMengenBindingSource (untergeordnetes DataTable)
    3. FKKomplettKomplettMengenBindingsource (Foreign Key)

    Mein Layout sieht so aus:

    1. übergeordnete Tabelle mit Auftrasgsnummer im DataGridView. Die restlichen Spalten werden in einzelnen Controls dargestellt. Speichern in XML funzt. => gebunden an KomplettBindingSource
    2. Foreign Key => alle Spalten der DataTable werden in einzelnen controls dargestellt. => Datensätze werden nicht in der XML gespeichert => gebunden en an FKKomplettKomplettMengenBindingSource

    Wenn ich im DataGridView eine leere Zeile für einen neuen Datensatz anklicke, wird im ersten Moment in der "ID-Textbox" der untergeordneten DataTable eine ID erzeugt.
    Sobald ich dann aber in ein weiteres Control der untergeordneten Tabelle klicke, ist die ID weg.

    Edit => habs nun gelöst. Erst in der übergeordneten Tabelle die Daten speichern. Dann eine neue Zeile hinzufügen, damit die ID und der Foreign Key erzeugt werden. Dann nach EIngabe aller Daten wieder speichern.
    Alle neuen Datensätze sind drin.

    Danke