Hallo Hallo
Ich habe ein DGV auf der Form, welches an einer BindingSource hängt.
Durch eine Filterung sind jedoch zwei verschiedene BindingSources möglich. (Einmal BSArtikel - zeigt einfach alle Artikel | einmal BSLieferantArtikel - zeigt alle Artikel eines Lieferanten.
Damit ich immer auf die richtige Bindingsource zurückgreife (beim bearbeiten, löschen, etc.) gibt es diese beiden Subs:
Alles ist prima.
Nun habe ich aber noch 3 Textboxen, ein Label und eine ComboBox, welche an die gleiche BS gebunden werden sollen wie das DGV.
Also wenn
Im Designer habe ich diese Controls erstmal an die BSArtikel gebunden, weils die BS ist, die beim Programmstart aktiv ist. Wenn nun nach einem Lieferanten gefiltert wird, stimmen natürlich die Werte in den Controls nichtmehr, wenn ich im DGV rumklicke.
Ich habe also die
Das klappt alles prima. Aber geht das irgendwie eleganter?
Ich habe versucht eine eigene Bindingsource, für diese Controls zu erstellen, um dann nur die DataSource Eigenschaft dieser neuen BS ändern zu müssen. Das habe ich aber nicht hinbekommen (hatte keine Werte in den Controls)
Ich habe ein DGV auf der Form, welches an einer BindingSource hängt.
Durch eine Filterung sind jedoch zwei verschiedene BindingSources möglich. (Einmal BSArtikel - zeigt einfach alle Artikel | einmal BSLieferantArtikel - zeigt alle Artikel eines Lieferanten.
Damit ich immer auf die richtige Bindingsource zurückgreife (beim bearbeiten, löschen, etc.) gibt es diese beiden Subs:
VB.NET-Quellcode
- Private Function GetUsedBindingsource() As BindingSource
- If _BSFilteredBySupplierIsActivated Then
- Return BSLieferantArtikel
- Else
- Return BSArtikel
- End If
- End Function
- Private Sub SetBindingSource()
- If _BSFilteredBySupplierIsActivated Then
- DGVArtikel.DataSource = BSLieferantArtikel
- Else
- DGVArtikel.DataSource = BSArtikel
- End If
- End Sub
Alles ist prima.
Nun habe ich aber noch 3 Textboxen, ein Label und eine ComboBox, welche an die gleiche BS gebunden werden sollen wie das DGV.
Also wenn
_BSFilteredBySupplierIsActivated
dann an die BSLieferantArtikel
, sonst an die BSArtikel
Im Designer habe ich diese Controls erstmal an die BSArtikel gebunden, weils die BS ist, die beim Programmstart aktiv ist. Wenn nun nach einem Lieferanten gefiltert wird, stimmen natürlich die Werte in den Controls nichtmehr, wenn ich im DGV rumklicke.
Ich habe also die
SetBindingSource
wie folgt erweitert:VB.NET-Quellcode
- Private Sub SetBindingSource()
- If _BSFilteredBySupplierIsActivated Then
- DGVArtikel.DataSource = BSLieferantArtikel
- AddBindingsForLabelControls(BSLieferantArtikel)
- Else
- DGVArtikel.DataSource = BSArtikel
- AddBindingsForLabelControls(BSArtikel)
- End If
- End Sub
- Private Sub AddBindingsForLabelControls(BS As BindingSource)
- TBLBLZ1.DataBindings.RemoveAt(0)
- TBLBLZ1.DataBindings.Add(New Binding("Text", BS, "LabelZeile1"))
- TBLBLZ2.DataBindings.RemoveAt(0)
- TBLBLZ2.DataBindings.Add(New Binding("Text", BS, "LabelZeile2"))
- TBEinheiten.DataBindings.RemoveAt(0)
- TBEinheiten.DataBindings.Add(New Binding("Text", BS, "AnzahlDerEinheiten"))
- CBMasseinheit.DataBindings.RemoveAt(0)
- CBMasseinheit.DataBindings.Add(New Binding("Text", BS, "Masseinheit"))
- End Sub
Das klappt alles prima. Aber geht das irgendwie eleganter?
Ich habe versucht eine eigene Bindingsource, für diese Controls zu erstellen, um dann nur die DataSource Eigenschaft dieser neuen BS ändern zu müssen. Das habe ich aber nicht hinbekommen (hatte keine Werte in den Controls)