Datenbindung mit Objekten

09/06/2009 - 23:24 von Thorsten Kleibaum | Report spam
Hallo zusammen,

habe da mal ein paar grundsàtzliche Fragen zum Thema Datenbindung mit
Objekten.

Ich habe eine Klasse AddressBindingList erstellt, die von BindingList<T>
erbt um Adress-Daten an Steuerelemente zu binden. Orientiert habe ich
mich dabei an einem Beispiel aus Frank Ellers "VS C# 2005". Soweit
funktioniert das auch alles ganz gut, aber leider beschrànkt er sich in
seinem Beispiel auf die Anzeige und das Sortieren der Daten. Was mir
jetzt fehlt ist ein gescheiter Weg, neue Daten hinzuzufügen (und
bestehende zu editieren).
Im Grunde habe ich das Ganze mittlerweile zwar so weit, daß es
funktioniert, aber ich habe das Gefühl, daß es besser/ sauberer geht.

Meine Form sieht derzeit so aus, daß ich im oberen Teil ein DataGridView
(readonly) mit einer Übersicht der Adress-Daten habe und darunter die
Details in TextBoxen anzeige. Dazu gibt es einen BindingNavigator.

Nehmen wir nun an, ich möchte eine neue Adresse über den Navigator
hinzufügen, so wird über den Standard-Konstruktor eine leeres
Address-Objekt erzeugt und meiner BindingList hinzugefügt, das ich dann
bearbeiten kann. Nachteil in meinen Augen: Mandatory-Felder werden so
zunàchst nicht berücksichtigt und müssen über Validierungs-Funktionen
kontrolliert werden. Könnte ich Address-Objekte nur über einen
entsprechnden Konstruktor erstellen, hàtte ich (zumindest bedingt) eine
inhàrente Sicherheit, daß diese Felder vorhanden bzw. in einem
definierten Zustand sind - auch wenn dieser null ist.

Damit komme ich zum AddingNew-Ereignis. Damit ist es zwar möglich, einen
bestimmten Konstruktor aufzurufen, doch wie soll ich zu dem Zeitpunkt an
die Daten kommen - ich habe ja noch nichts eingeben können.

Meine Vorstellung wàre also:
1. Schritt: Formular leeren (was auf temporàr ungebundene TextBoxen
hinauslaufen würde)
2. Schritt: Daten eingeben
3. Schritt: durch Klick auf "Hinzufügen" ein Objekt erzeugen und dies
der Liste hinzufügen (ggf. mit Validierung)

Momentan verfolge ich obig dargestellten Ansatz (erzeugen und füllen
eines leeren Objekts). Allerdings habe ich nicht unbedingt ein gutes
Gefühl dabei, denn zum einen kann ich mir nicht vorstellen, daß die
Datenbindung Standard-Konstruktoren erzwingt, wo ja insbesondere das
AddingNew-Ereignis existiert, aber zum anderen vermisse ich im
BindingNavigator eine "Neu"-Schaltflàche, die mir ein ungebundenes,
leeres Formular ermöglicht, dessen Eingaben ich dann spàter einem
Konstruktor übergeben kann.

Langer Rede kurzer Sinn: wie haben sich die Jungs bei Microsoft das
gedacht? Wie arbeite ich sauber?
Des weiteren: macht es Sinn - und wenn ja, wie - in dem Zusammenhang die
Methode AddNewCore() zu überschreiben?

Danke und Gruß
Thorsten
 

Lesen sie die antworten

#1 Peter Fleischer
10/06/2009 - 10:11 | Warnen spam
"Thorsten Kleibaum" schrieb im Newsbeitrag
news:h0mjtr$d28$02$

Meine Form sieht derzeit so aus, daß ich im oberen Teil ein DataGridView
(readonly) mit einer Übersicht der Adress-Daten habe und darunter die
Details in TextBoxen anzeige. Dazu gibt es einen BindingNavigator.

Nehmen wir nun an, ich möchte eine neue Adresse über den Navigator
hinzufügen, so wird über den Standard-Konstruktor eine leeres
Address-Objekt erzeugt und meiner BindingList hinzugefügt, das ich dann
bearbeiten kann. Nachteil in meinen Augen: Mandatory-Felder werden so
zunàchst nicht berücksichtigt und müssen über Validierungs-Funktionen
kontrolliert werden.



Ho Thorsten,
wenn du das AddingNew-Ereignis nutzt, kannst du acuh mit Information
vorbelegte Objekte berietstellen.

Könnte ich Address-Objekte nur über einen entsprechnden Konstruktor
erstellen, hàtte ich (zumindest bedingt) eine inhàrente Sicherheit, daß
diese Felder vorhanden bzw. in einem definierten Zustand sind - auch wenn
dieser null ist.



AddingNew!!!

Damit komme ich zum AddingNew-Ereignis. Damit ist es zwar möglich, einen
bestimmten Konstruktor aufzurufen, doch wie soll ich zu dem Zeitpunkt an
die Daten kommen - ich habe ja noch nichts eingeben können.



Wenn das neue (hinzugefügte) Objekt das aktuelle Objekt wird, dann kannst du
bei gebundenen Steuerelementen alle gebundenen Eigenschaften mit Werten
belegen.

Meine Vorstellung wàre also:
1. Schritt: Formular leeren (was auf temporàr ungebundene TextBoxen
hinauslaufen würde)
2. Schritt: Daten eingeben
3. Schritt: durch Klick auf "Hinzufügen" ein Objekt erzeugen und dies der
Liste hinzufügen (ggf. mit Validierung)



Das geht auch, ist aber ungebunden.

Momentan verfolge ich obig dargestellten Ansatz (erzeugen und füllen eines
leeren Objekts). Allerdings habe ich nicht unbedingt ein gutes Gefühl
dabei, denn zum einen kann ich mir nicht vorstellen, daß die Datenbindung
Standard-Konstruktoren erzwingt, wo ja insbesondere das AddingNew-Ereignis
existiert, aber zum anderen vermisse ich im BindingNavigator eine
"Neu"-Schaltflàche, die mir ein ungebundenes, leeres Formular ermöglicht,
dessen Eingaben ich dann spàter einem Konstruktor übergeben kann.



Der BindingNavigator ist, wie sein Name schon sagt, ein Steuelement für
Bindungen. Wenn du ungebunden arbeiten willst, brauchst du den
BindingNavigator nicht. Da könntest du ein Menüeintrag nutzen.

Langer Rede kurzer Sinn: wie haben sich die Jungs bei Microsoft das
gedacht?



Sie biten gebunden und ungebunde Arbeit. Für dein Projekt sind die Jungs bei
Microsoft nun wirklich nicht verantwortlich :-)

Wie arbeite ich sauber?



Was verstehst du unter "sauber"? Wenn ein implementierter Algorithmus eine
vorgegebene Aufgabenstellung fehlerfrei löst, dann ist das Programm doch
"sauber". Meist gibt es für eine Aufgabenstellung unterschiedliche
Lösungswege, die ggf. alle fehlerfrei funktionieren.

Des weiteren: macht es Sinn - und wenn ja, wie - in dem Zusammenhang die
Methode AddNewCore() zu überschreiben?



Was ist AddNewCore?

Viele Grüsse
Peter

Ähnliche fragen