Hallo,
ich habe ein Problem beim Realisieren des Form-übergreifenden Databindings bei meinem typisierten Dataset. Leider musste ich feststellen, dass meine Herangehensweise beim erstellen des Datasets wohl nicht ganz richtig war. Kurz gesagt ist die Situation so, dass ich als erstes eine ChildForm erstellt habe, dort einiges an Daten darstelle und bearbeite. Beim Laden der ChildForm wird das DataSet geladen:
Und bei jeder Änderung an einem Datensatz in der ChildForm wird das DataSet gespeichert:
Die ParentForm war bis dato außenvor und nun möchte ich die Daten eben hier darstellen. Mein Programmstart gestalte ich wie folgt:
Dort habe ich jetzt versucht mal beispielhaft zwei BindingSources von der ChildForm auf mein Parent „umzustöpseln“, gemäß des „CrossBindings“ aus folgendem Thread:
Daten laden, speichern, verarbeiten - einfachste Variante
Ich weiss, im Vergleich dazu versuche ich es gerade genau umgekehrt. Zwar kriege ich so die Daten dargestellt, meine ParentForm kriegt aber keine Änderungen in der ChildForm mit! Wie wäre das theoretisch umzusetzen, dass meine ParentForm Datenänderungen mitschneidet?
Wichtigere Frage für mich: Wenn ich in der ChildForm Änderungen an Daten vornehme, greife ich dann immer auf das DataSet der ParentForm zu?Z.B.:
Oder läuft alles über das DataSet der ChildForm? Wann speichert man die DataFile des DataSets dann am besten?
Peterle
ich habe ein Problem beim Realisieren des Form-übergreifenden Databindings bei meinem typisierten Dataset. Leider musste ich feststellen, dass meine Herangehensweise beim erstellen des Datasets wohl nicht ganz richtig war. Kurz gesagt ist die Situation so, dass ich als erstes eine ChildForm erstellt habe, dort einiges an Daten darstelle und bearbeite. Beim Laden der ChildForm wird das DataSet geladen:
VB.NET-Quellcode
- Public Sub Dataset_LoadXml()
- DsMeasurement.Clear()
- For Each dt As DataTable In DsMeasurement.Tables
- dt.BeginLoadData() ' Setzt DataBindings aus, damit Bindings erst vollzogen werden, wenn alle Daten bereitstehen
- Next
- If _Datafile.Exists() Then DsMeasurement.ReadXml(_Datafile.FullName)
- For Each dt As DataTable In DsMeasurement.Tables
- dt.EndLoadData()
- Next
- DsMeasurement.EnforceConstraints = True
- DsMeasurement.AcceptChanges()
- End Sub
Und bei jeder Änderung an einem Datensatz in der ChildForm wird das DataSet gespeichert:
VB.NET-Quellcode
- Private Sub SaveDataSet()
- Validate() ' Überprüft alle aktuellen Control-Eingaben und übernimmt sie in die Datasource. Ist wichtig, da sonst evtl. letzte Eingabe gecancelt wird.
- DsMeasurement.WriteXml(_Datafile.FullName)
- DsMeasurement.AcceptChanges() ' Markiert alle Datensätze als übereinstimmend mit der "Datenbank" - wichtig für den DataSet.HasChanges-Test im FormClosing.
- End Sub
Die ParentForm war bis dato außenvor und nun möchte ich die Daten eben hier darstellen. Mein Programmstart gestalte ich wie folgt:
VB.NET-Quellcode
- <STAThread>
- Public Sub Main()
- Application.EnableVisualStyles()
- Application.SetCompatibleTextRenderingDefault(True)
- My.Settings.Save()
- Dim frmMain As New frmMain
- frmMain.TemperaturKurvenBindingSource.DataSource = frmTempCurves.DsMeasurement
- frmMain.TemperaturKurvenSegmenteBindingSource.DataSource = frmTempCurves.DsMeasurement
- Application.Run(frmMain) ' Konstruktor für Form wird aufgerufen
- End Sub
Dort habe ich jetzt versucht mal beispielhaft zwei BindingSources von der ChildForm auf mein Parent „umzustöpseln“, gemäß des „CrossBindings“ aus folgendem Thread:
Daten laden, speichern, verarbeiten - einfachste Variante
Ich weiss, im Vergleich dazu versuche ich es gerade genau umgekehrt. Zwar kriege ich so die Daten dargestellt, meine ParentForm kriegt aber keine Änderungen in der ChildForm mit! Wie wäre das theoretisch umzusetzen, dass meine ParentForm Datenänderungen mitschneidet?
Wichtigere Frage für mich: Wenn ich in der ChildForm Änderungen an Daten vornehme, greife ich dann immer auf das DataSet der ParentForm zu?Z.B.:
Oder läuft alles über das DataSet der ChildForm? Wann speichert man die DataFile des DataSets dann am besten?
Peterle