Re: "Two-way Databinding" mit nem DropDownList-Control II

Written on April 20, 2006

Thomas' Problem mit DropDownLists und DataBinding von Null-Werten löse ich wie folgt:

Ausgehend von der Problemstellung, dass 0-(Null-)Werte an eine DropDownList innerhalb einer Grid-/Form-/Details-View gebunden werden sollen, habe ich in der Datentabelle für ein Menü (z.B. für ein CMS, das dann über die FormView/DropDownList verwaltet werden soll) ein Feld "IsChildOf", welches auf die ID derselben Tabelle verweist, jedoch NULL-Werte zulässt:

´

Die Datenansicht der Tabelle könnte dann z.B. so aussehen:

In der Seite (bzw. dem .ascx) existiert nun eine SqlDataSource (hier SqlDataSource1 - der Einfachheit wegen nicht über ObjectDataSource), die die jeweilige SeitenID aus dem QueryString liest und anhand derer die Seite aus der Datenbank holt:

Die übergeordneten Seiten sind in einer DropDownList (hier DropDownList1) dargestellt, so dass man leicht über den Klartext auswählen kann, welches eben die übergeordnete Seite ist.

Alle Seiten werden über die SqlDataSource "AllPagesDataSource" gelesen und an DropDownList1 gebunden.

Die Vorauswahl der aktuell eingestellten übergeordneten Seite geschieht über das DataBinding des SelectedValue der DropDownList an das Feld "IsChildOf":

Würde nun z.B. die Seite mit der ID 73 zur Bearbeitung geöffnet, würde man zu Laufzeit die Fehlermeldung erhalten, dass der Wert (in diesem Fall 0) für SelectedValue der DropDownList1 nicht existiert - was auch korrekt ist.

Diese Problem lässt sich nun leicht umgehen, indem man ein fixes Item zur DropDownList hinzufügt, dessen Value "0" ist und z.B. den Wert "Hauptseite" hat:

Nun muß man noch die Eigenschaft AppendDataBoundItems auf True setzen, damit die Items aus der SqlDataSource an das fixe Item angehängt werden.

Das Resultat im Browser:

Jetzt hoffe ich nur noch, dass ich Thomas' Problem richtig interpretiert habe ;-)