Moin moin,
ich habe hier ein DGV mit zwei Combobox Spalten. In der ersten Spalte "Adresstyp" wähle ich den Adresstyp aus (Kunde, Lieferant, Hersteller, etc.). In der zweiten Spalte wähle ich eine Adresse, wobei mir der Name angezeigt, aber die ID im Dataset gespeichert wird (DisplayMember, ValueMember). Das DGV ist mit einer BindingSource ans Dataset gebunden, die Combobox in Spalte 2 hat eine eigene BindingSource an die Adressen. Die Combobox in Spalte 1 fülle ich manuell über .Items.Add(""). Dieses Setting funktioniert ganz prima.
Nun sollen in der zweiten Spalte aber nur die Adressen angezeigt werden, die dem jeweiligen Typ entsprechen. Wähle ich "Kunde" nur die Kunden, bei "Hersteller" nur die Hersteller.
Das geht ohne groß nachzudenken ganz einfach: Sobald ich den Typ ändere (CellLeave), setze ich einen Filter auf die BindingSource der Combobox in der zweiten Spalte. Soweit so gut.
Nun stell dir mal vor, dass da schon ein Eintrag ist. Also ein "Kunde" mit "Kundenname" steht im DGV. In einem neuen Datensatz lege ich nun einen anderen Adresstyp fest, sagen wir "Hersteller". Das Ereignis CellLeave filtert wieder die BindingSource der zweiten Combobox und dann knallt es. Weil der Eintrag im ersten Datensatz nicht mehr zur neu gefilterten DataSource passt. Ja klar, ist ja ein anderer Adresstyp.
Ich vermute, ich muss die BindingSource von der Combobox in Spalte 2 (nur der Zelle!) lösen, sobald der Datensatz gespeichert ist. Außerdem bei Änderung des Adresstyps den Wert in Spalte 2 zunächst löschen, bevor die BindingSource gefiltert wird (sonst knallt es). Da meine Umgebung noch eine Stufe komplexer ist, als hier beschrieben, ist das bestenfalls aufwändig, da man bei jedem Masterdatensatz das komplette DGV neu durchackern müsste. Das Form mit dem DGV enthält bei mir eine Adresse, die mit AdressID in der n:m Tabelle steht. damit wird das DGV zunächst gefiltert.
Bevor ich also den feinsten Spaghetticode produziere und es am Ende doch nicht richtig rund läuft, dachte ich, ich frag mal. Das müsste doch schonmal jemand gemacht haben und zeigt mir, wie es geht. Welche Ereignisse zu benutzen sind und und was darin zu tun ist.
Viele Grüße Oliver
ich habe hier ein DGV mit zwei Combobox Spalten. In der ersten Spalte "Adresstyp" wähle ich den Adresstyp aus (Kunde, Lieferant, Hersteller, etc.). In der zweiten Spalte wähle ich eine Adresse, wobei mir der Name angezeigt, aber die ID im Dataset gespeichert wird (DisplayMember, ValueMember). Das DGV ist mit einer BindingSource ans Dataset gebunden, die Combobox in Spalte 2 hat eine eigene BindingSource an die Adressen. Die Combobox in Spalte 1 fülle ich manuell über .Items.Add(""). Dieses Setting funktioniert ganz prima.
Nun sollen in der zweiten Spalte aber nur die Adressen angezeigt werden, die dem jeweiligen Typ entsprechen. Wähle ich "Kunde" nur die Kunden, bei "Hersteller" nur die Hersteller.
Das geht ohne groß nachzudenken ganz einfach: Sobald ich den Typ ändere (CellLeave), setze ich einen Filter auf die BindingSource der Combobox in der zweiten Spalte. Soweit so gut.
Nun stell dir mal vor, dass da schon ein Eintrag ist. Also ein "Kunde" mit "Kundenname" steht im DGV. In einem neuen Datensatz lege ich nun einen anderen Adresstyp fest, sagen wir "Hersteller". Das Ereignis CellLeave filtert wieder die BindingSource der zweiten Combobox und dann knallt es. Weil der Eintrag im ersten Datensatz nicht mehr zur neu gefilterten DataSource passt. Ja klar, ist ja ein anderer Adresstyp.
Ich vermute, ich muss die BindingSource von der Combobox in Spalte 2 (nur der Zelle!) lösen, sobald der Datensatz gespeichert ist. Außerdem bei Änderung des Adresstyps den Wert in Spalte 2 zunächst löschen, bevor die BindingSource gefiltert wird (sonst knallt es). Da meine Umgebung noch eine Stufe komplexer ist, als hier beschrieben, ist das bestenfalls aufwändig, da man bei jedem Masterdatensatz das komplette DGV neu durchackern müsste. Das Form mit dem DGV enthält bei mir eine Adresse, die mit AdressID in der n:m Tabelle steht. damit wird das DGV zunächst gefiltert.
Bevor ich also den feinsten Spaghetticode produziere und es am Ende doch nicht richtig rund läuft, dachte ich, ich frag mal. Das müsste doch schonmal jemand gemacht haben und zeigt mir, wie es geht. Welche Ereignisse zu benutzen sind und und was darin zu tun ist.
Viele Grüße Oliver