Daten im DataSet bzw. Datatable

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von paddy91952.

    Daten im DataSet bzw. Datatable

    Hallo Zusammen,

    folgende Frage:
    Ich gebe über meine Form 1 mehrere Daten in die DataTable "RechnungSonstige" ein.
    Kann ich diese Daten über eine andere Form abrufen?

    Zur Zeit ist es nämlich so, dass ich über die erste Form Rechnungsdaten eingebe und im Anschluss daran sich ein ReportViewer öffnet. Die Tabelle, welche auf die DataTable zugreift ist aber leer sprich die Daten sind weg ?(
    Zeig mal bitte ein wenig Code.

    Weil natürlich geht dies - die Frage ist halt wo und wie Du die DataTable definiert hast.

    Am Anfang würde ich jetzt erst einmal mit Public arbeiten!

    Edit: Fürchterlicher Pseudo-Code - aber er zeigt wie es geht!

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public datatb As New DataTable
    3. Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. ' Code
    5. End Sub
    6. ' anderes Subs
    7. End Class

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. ' Zugriff auf datatb mit:
    4. Dim tb = DeinProjektname.Form1.datatb ' oder Namespace falls vom Projektnamen abweichend!
    5. End Sub
    6. ' anderes Subs
    7. End Class

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Thias“ ()

    Ich habe die DataTable nicht erst in der entsprechenden Form angelegt, sondern innerhalb eines Datasets, welches ich erstellt habe!

    ein Eintrag wird folgendermaßen hinzugefügt

    VB.NET-Quellcode

    1. RechnungsDs1.Rechnungsonstige.AddRechnungsonstigeRow(id, beschreibung, preiseinzeln, preisgesamt)


    wobei id, beschreibung preiseinzeln, preisgesamt jeweils Variablen sind.
    Das Eintragen Funktioniert auch super, ich lasse mir die einzelnen Daten auch mittels Datagridview anzeigen.
    Leider kann ich auf diese Daten nur mit dieser Form zugreifen
    Dies ändert doch rein gar nichts an der allgemeinen Logik meines Lösungsvorschlages!

    Also wenn Dein DataSet RchnungsDs1 heißt und die Tabelle Rechnungsonstige, dann definierst Du folgendes - Kommentare bitte beachten!

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public tblRechnungsonstige As New RechnungsDs1.Rechnungsonstige
    3. Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. ' Code - "RechnungsDs1.Rechnungsonstige" überall mit tblRechnungsonstige ersetzen!
    5. ' tblRechnungsonstige.AddRechnungsonstigeRow(id, beschreibung, preiseinzeln, preisgesamt) sollte problemlos funktionieren!
    6. End Sub
    7. ' anderes Subs
    8. End Class

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. ' Zugriff auf tblRechnungsonstige mit:
    4. Dim tblRgSonstige = DeinProjektname.Form1.tblRechnungsonstige ' oder Namespace falls vom Projektnamen abweichend!
    5. End Sub
    6. ' anderes Subs
    7. End Class

    Wenn Du dies nicht hinbekommen solltest, dann hilft es nur relevante Code-(Ausschnitte) aus Deinem aktuellen Programm zu zeigen!

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

    ...normalerweise übergibts du deinem neuen form (ich sag mal form2) bei der instanzierung das dataset.

    alternativ kannst du das dataset der auch über eine property der form2 übergeben.

    auf jeden fall solltest du das dataset kapseln und auch darauf achten, dass ggfls. vom designer angelegte bindingsources auf das dataset der form 2 zeigen und nicht auf das ursprüngliche.
    Gruß Hannes
    Schaut euch dazu einmal folgendes TUT von EDR an...
    Dabei kommt es an, dass immer nur ein und das selbe Dataset bedient wird.
    @Thias
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen

    Edit: @hans im glück war da jetzt schneller

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

    @paddy91952
    Solltest Du tatsächlich in Form1 und Form2 das DataSet inkl. BindingSource eingebunden haben (wovon im Ausgangspost nichts steht), dann zeigt das dankenswerterweise von @VB1963 verlinkte Tutorial vom EDR tatsächlich die beste Lösung!

    Oder hast Du auf "Form1" und "Form2" jeweils nur das DataSet ohne BindingSource? Oder hast Du das DataSet gar nicht auf den Formen?

    Edit: Kommentart zu Post 9: Natürlich kann die Tabelle oder das DataSet auch ohne BindingSource innerhalb der Form2 definiert sein - dann ist die Tabelle halt nur mit keinem DataGridView verbunden - weil man z.B. in Form2 keine DataGridView oder ähnliches braucht oder weil man im Programm später sowieso auf die BindingSource von Form1 verweist oder ... - Möglichkeiten gibt es sehr viele - führt aber vom Thema weg!

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „Thias“ ()

    Hallo Leute,
    noch einmal vielen Dank für eure Hilfe. Die Methode vom EDF war wirklich die einfachste. Hier wie ich es jetzt gelöst habe, falls nochmal jemand das selbe problem hat.

    In Form1:

    VB.NET-Quellcode

    1. Form2.DataTable1BindingSource.DataSource = Me.DataSet1
    2. Form2.Show(Me)



    Besten Dank an alle