Hallo zusammen,
ich kam bisher sehr gut mit tDS, DGVs und Co zurecht. Nun habe ich folgendes Problem inkl. Workaround, welche ich nicht nachvollziehen kann.
In meinem tDS habe ich 4 Tabellen: T1 (Items), T2 (ProcessControlParametersX) und als Hilfstabelle T3 (ProcessControls), die die beiden miteinander verknüpft, so wie die Article-Tabelle im VVV-Tutorial vom EdR. Zusätzlich eine T4 (Vessels).
In einer ComboBox eines Subforms werden die T4-Einträge aufgelistet, in einem DGV lasse ich mir T3 anzeigen. Eine DGV-Spalte ist eine ComboBox-Spalte, die mir die konkreten Werte von T2 anzeigt, indem ich DataSource, ValueMember und DisplayMember einstelle. Wenn ich nun zur Laufzeit das Subform instanziiere, das tDS zu Fuß umstöpsle und das Subform als Dialog zeigen lassen will, erhalte ich eine Ex, dass eine in T3 definitiv vorhandene Spalte nicht Teil der Tabelle sei.
Der Code dazu:
Habe erkannt, dass es mit BindingSource.Suspend&ResumeLayout behebbar ist:
Nun zum eigentlichen Problem: Entferne ich das Binding der ComboBox zu T4, dann läuft das Programm, obwohl mir vorher ein Problem mit T3 bescheinigt wird. Das kann's ja wohl nicht sein! Woher rührt dieses merkwürdige Verhalten? Und warum kommt da solch eine irreführende Meldung bzgl der fehlenden Spalte
Lösung in Post#5
ich kam bisher sehr gut mit tDS, DGVs und Co zurecht. Nun habe ich folgendes Problem inkl. Workaround, welche ich nicht nachvollziehen kann.
In meinem tDS habe ich 4 Tabellen: T1 (Items), T2 (ProcessControlParametersX) und als Hilfstabelle T3 (ProcessControls), die die beiden miteinander verknüpft, so wie die Article-Tabelle im VVV-Tutorial vom EdR. Zusätzlich eine T4 (Vessels).
In einer ComboBox eines Subforms werden die T4-Einträge aufgelistet, in einem DGV lasse ich mir T3 anzeigen. Eine DGV-Spalte ist eine ComboBox-Spalte, die mir die konkreten Werte von T2 anzeigt, indem ich DataSource, ValueMember und DisplayMember einstelle. Wenn ich nun zur Laufzeit das Subform instanziiere, das tDS zu Fuß umstöpsle und das Subform als Dialog zeigen lassen will, erhalte ich eine Ex, dass eine in T3 definitiv vorhandene Spalte nicht Teil der Tabelle sei.
Der Code dazu:
Habe erkannt, dass es mit BindingSource.Suspend&ResumeLayout behebbar ist:
VB.NET-Quellcode
- Using Dlg As New FrmControls
- Dlg.BsItems.SuspendBinding()
- Dlg.BsProcessControlParameters.SuspendBinding()
- Dlg.BsProcessControls.SuspendBinding()
- Dlg.BsVessels.SuspendBinding()
- Dlg.Tds = Tds
- Dlg.BsItems.DataSource = Tds
- Dlg.BsVessels.DataSource = Tds
- Dlg.BsProcessControlParameters.DataSource = Tds
- Dlg.BsVessels.ResumeBinding()
- Dlg.BsProcessControls.ResumeBinding()
- Dlg.BsProcessControlParameters.ResumeBinding()
- Dlg.BsItems.ResumeBinding()
- Dlg.ShowDialog(Me)
- End Using
Nun zum eigentlichen Problem: Entferne ich das Binding der ComboBox zu T4, dann läuft das Programm, obwohl mir vorher ein Problem mit T3 bescheinigt wird. Das kann's ja wohl nicht sein! Woher rührt dieses merkwürdige Verhalten? Und warum kommt da solch eine irreführende Meldung bzgl der fehlenden Spalte
Name
? Der Debugger bestätigt mir die Existenz der Tabellenspalte. Was noch dazukommt: Lasse ich Suspend- und ResumeBinding weg und setze die Zeile Dlg.BsProcessControls.DataSource = Tds.ProcessControls
vor die ShowDialog-Zeile, klappt auch alles. Ich habe das Gefühl, dass ich die wahre Ursache des Problems noch nicht erfasst habe. Wer kann mir weiterhelfen?Lösung in Post#5
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()