Peter Bucher - Mein Experiment, meine Spielereien, meine Welt...   ·   Stefan Falz   ·   Jürgen Gutsch   ·   Golo Roden   ·   ASP.NET Zone   ·   Microsoft ASP.NET
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Eintraege der CheckBoxList beim Databinding vorselektieren

Beim CheckBoxList Control gibt es die Eigenschaften DataTextField und DataValueField, diese dienen dazu das jeweils angegebene Feld an die Text- und Value Eigenschaft eines CheckBox Items (ListItem) zu binden.
Die Klasse ListItem sowie auch die Html Repräsentation haben noch eine zusätzliche Eigenschaft als Indikator ob der Eintrag selektiert ist oder nicht.

Da wäre es doch passend zu den schon vorhandenen Eigenschaft, eine zusätzliche Eigenschaft "DataSelectedField" und somit die Möglichkeit haben, die schon vorhandene Selektierung aus der Datenbank, XML oder einer anderen Datenquelle direkt zu binden.

out-of-the-box gibt es da keine Möglichkeit, es bleibt also nur der Ausweg, alle ListItems noch einmal durchzugehen, die Selektierung zu setzen bzw. gleich die gesamten Daten manuell an die CheckBoxList zu binden.

Nun, das muss doch noch einfacher gehen? Ja, das tut es auch!
Die Lösung ist an dieser Stelle ein CustomControl das diese zusätzliche Eigenschaft besitzt und natürlich auch dementsprechend umsetzt.
Zusätzlich zur Vorselektierung habe ich ein ItemDataBound Event implementiert, um den Text, die Value oder den Checked Zustand zu manipulieren.
Mir fällt hierzu im Moment kein sinnvolles Beispiel ein, jedoch stellt das gleichzeitig auch ein Beispiel dar, wie ein eigener Event implementiert werden kann.

Hauptbestandteil der Implementation ist die überschriebene PerformDataBinding Methode der Klasse ListControl.
Im ersten Schritt übergebe ich die DataSource an die Methode der Basisklasse, damit diese das _normale_, schon implementierte DataBinding ausführt.
Als zweiter Schritt übergebe ich die DataSource an meine eigene Methode, die die Selektion vornimmt.
Das funktioniert soweit bei normalen DataSources wunderbar. Wird jedoch an ein Objekt vom Typ "IDataReader" gebunden, stösst man hier auf das Problem, das ein DataReader nur einmal durchlaufen werden kann / darf.

Meine Lösung Workaround ist hierbei ein kopieren der DataSource in eine generische Liste, die Objekte vom Typ "object" hält. Diese wird dann jeweils an diese zwei Methoden übergeben.
Falls hier jemandem eine bessere / saubere Lösung einfällt, bin ich natürlich daran interessiert :-)

Das Beispielprojekt enthält das CustomControl und ein Web Application Project mit jeweils einem Databinding gegen eine Xml Datei (XmlDataSource) und eine Sql Datenbank (IDataReader).

Beispielprojekt:

PS: Danke an Norbert für den Hinweis zum Workaround für IDataReader Datenquellen.

Veröffentlicht Montag, 3. September 2007 23:59 von Peter Bucher

Kommentare

# re: Eintraege der CheckBoxList beim Databinding vorselektieren

erstaunlich, dass das Problem immer noch fortbesteht und seitens der .NET Entwickler bei Microsoft keine Veranlassung besteht, hier eine gescheite Abhilfe zu schaffen.

Samstag, 12. September 2009 23:03 by Rene Drescher-Hackel

# re: Eintraege der CheckBoxList beim Databinding vorselektieren

@Rene

Vielleicht untere Prio oder "by design" ;-)

Montag, 14. September 2009 16:59 by Peter Bucher
Anonyme Kommentare sind nicht zugelassen