Autor Beitrag
scher
Hält's aus hier
Beiträge: 1



BeitragVerfasst: So 23.09.07 02:11 
Ich habe eine BindingSource und habe dieser ein IList<Participant>-Objekt als DataSource übergeben. Participant ist die Elternklasse für einige andere Klassen. In der oben genannten Liste sind auch Objekte der Klasse Person, die von Participant abgeleitet ist.

Ich möchte nun mittels Databinding auf eine Property der Klasse Person (Anrede) zugreigen. Ich mache das so:

ausblenden Quelltext
1:
txtAnrede.DataBindings.Add("Text", participants, "Name").DataSourceUpdateMode = DataSourceUpdateMode.OnValidation;					


Ich bekomme aber, sobald das erste Mal auf das Binding zugegriffen wird (in meinem Fall dann, wenn ich das Formular sichtbar mache) folgende Exception:

An die Eigenschaft oder Spalte Title für die DataSource kann nicht gebunden werden.
Parametername: dataMember


Hat jemand eine Ahnung, was das ein könnte.

Vielen Dank
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: So 23.09.07 22:22 
user profile iconscher hat folgendes geschrieben:
An die Eigenschaft oder Spalte Title für die DataSource kann nicht gebunden werden.
Parametername: dataMember

Hat jemand eine Ahnung, was das ein könnte.
Ja, ich.
Die BindingSource hat zu diesem Moment noch keine Ahnung, was für Elemente sie kurz darauf enthalten würde.
Es gibt da einen wundervollen Trick in VS2005, den leider viele noch nicht kennen.
Du kannst dem Designer sagen, mit welcher klasse du arbeiten willst, so dass du bereits im Designer die Datenbindungen vornehmen kannst.
Dazu gehst du oben im Menü mal auf Data und dort auf Show data sources.
Es ploppt ein Toolwindow auf. Darin kannst du eine neue Datenquelle anlegen, es soll eine Object Datasource werden.
Im 2. Schritt des Dialoges fragt er dich nach dem Typen und du kannst dann deinen Participant aus wählen.
Nachdem Participant und alle Eigenschaften in dem Datasource fenster dargestellt werden, kannst du die Datasource der BindingSource auf diese Klasse setzen.
Und außerdem kannst du die Name-Eigenschaft einfach auf die Textbox ziehen um Text an Name zu binden.

Wenn jetzt zur Laufzeit die Bindings evaluiert werden bevor die tatsächliche Datasource deiner Bindingsource besetzt hast, dann werden trotzdem richtigen Typeninformationen geliefert.

Ich hoffe das half...