2010-06-01 6 views
2

Je travaille actuellement avec un contrôle qui hérite de DropDownList (il a quelques fonctionnalités supplémentaires qui ne sont pas vraiment pertinentes à cette question, mais cela me donne un bon endroit pour mettre en œuvre les choses supplémentaires dont je vais discuter).DropDownList: DataTextField, DataValueField ... DataEnabledField?

Nous utilisons la liaison de données, DataTextField et DataValueField fonctionnant parfaitement. Cependant, je me trouve dans le besoin d'un champ similaire qui contrôlera si l'élément est activé ou non. (J'ai déjà remplacé la méthode RenderContents du contrôle afin qu'il rende correctement les éléments non activés, puisque DropDownList ne le fait pas par défaut.)

Ainsi, je voudrais savoir comment remplacer la liaison de données de DropDownList il agit donc exactement comme d'habitude, sauf qu'un champ supplémentaire de chaque élément DataSource est appliqué à la propriété Enabled de chaque ListItem. (NB: le champ auquel je me lierai n'est pas un booléen direct, et n'a pas de conversion explicite/implicite en booléen, donc je vais probablement le "passer" comme une chaîne.)

Répondre

0

la logique de liaison pour le contrôle DropDownList est effectivement mis en œuvre dans sa classe de base ListControl. La méthode que vous devez remplacer est PerformDataBinding (IEnumerable)

Vous pouvez regarder l'implémentation par défaut dans le réflecteur pour vous assurer que vous ne manquez pas quelque chose, mais il est protégé virtuel, vous ne devriez pas avoir de problèmes. Appelez simplement la base, puis ajoutez la logique dont vous avez besoin.

+0

Merci de m'avoir indiqué la bonne direction; Je l'ai maintenant fait ce que je veux :) Après l'appel de base, je suppose que les éléments de la liste sont dans le même ordre que la source de données IEnumerable, mais cela semble fonctionner. – Rawling

+0

Heh, et après avoir vérifié Reflector j'ai vu que je n'ai même pas besoin de surcharger RenderContents car il fait vraiment attention au champ Enabled - je dois avoir foiré quand je testais auparavant. – Rawling

+0

Je suis content que vous l'ayez fait fonctionner :) – Slavo

Questions connexes