Ich habe ein Erfassungsformular für einen Works Order, und es hat eine CustomerBindingSource
und eine WorksOrderBindingSource
Kontrolle. Die meisten Bearbeitungsfelder sind an die WorksOrderBindingSource
gebunden, mit einer ComboBox, deren Liste an die CustomerBindingSource
gebunden ist, und ihre SelectedValue
ist an das CustomerId
Feld in der WorksOrderBindingSource
gebunden. Das ist alles sehr Routine und Standard, keine Funnies hier.Wie kann ich einen aktuellen BindingSource-Datensatz auf null setzen?
Dann habe ich auch einige Textfelder, in denen ich die Eigenschaften des aktuell ausgewählten Kunden für den aktuell bearbeiteten Werkauftrag anzeigen kann. Ich habe diese Felder auch an die CustomerBindingSource
gebunden. Wenn ein Kunde ausgewählt ist, zeigen diese Felder die Eigenschaften dieses Kunden erwartungsgemäß an.
Mein Problem ist, wenn ich das Formular verwenden möchte, um einen neuen Werksauftrag zu erfassen. Ich instanziiere ein neues WorksOrder
Objekt mit CustomerId == null
und binde es an die WorksOrderBindingSource
. Ich habe kein Objekt in der CustomerBindingSource
mit einer Id == null
, so wie erwartet, ist die Dropdown-Combobox leer, aber die CustomerBindingSource.Current
Eigenschaft verweist auf das erste Customer-Objekt in dieser Datenquelle. Die kundengebundenen Anzeigefelder zeigen Werte für diesen Kunden an, während noch kein Kunde ausgewählt wurde.
Die einzige Workaround für das, die für mich offensichtlich ist, scheint ungeschickt. Darin habe ich zwei vom Kunden eingegebene Bindungsquellen, eine für einen ausgewählten Kunden, und um die Kundenanzeigefelder zu füllen, und eine andere, um nur das Kunden-Dropdown zu füllen. Dann muss ich ein Auswahlereignis behandeln, und nur wenn ein Kunde ausgewählt ist, dann finde ich diesen Kunden in der Bindungsquelle für die Anzeigefelder, und wenn keine ausgewählt ist, setze die Datenquelle für die Anzeigefelder auf Null. Das fühlt sich schrecklich ungeschickt an. Gibt es einen anderen Weg, um zu erreichen, was ich will?
Warum nicht einen "bitte-wählen-einen-Kunden" -Eintrag zur Bindungsquelle hinzufügen? – Bijan
Sie müssen den Benutzer zwingen, die aktuellen Änderungen zu speichern, damit Ihrem NewRow eine gültige CustomerID zugewiesen wird. –