J'ai une propriété personnalisée sur un contrôle utilisateur qui a plusieurs états/modes. Si cette propriété est définie dans la page parente: Je voudrais que mon contrôle se mette à jour automatiquement. L'utilisation de la propriété dans le chargement de la page ne fonctionne pas car elle n'est pas lancée.Overriding DataBind sur le contrôle de l'utilisateur, mises en garde?
Je peux imaginer 3 méthodes pour ce faire:
- Sur la propriété, je pourrais ajouter un bloc de code qui appellerait this.DataBind().
- Je pourrais ajouter le code en remplaçant la méthode virtuelle DataBind.
- Je pourrais créer une méthode de mise à jour propriétaire publique.
Je voudrais avoir une idée de ce qu'est la meilleure pratique en général. Plus précisément, j'ai choisi de remplacer la méthode virtuelle DataBind. Mon pseudo code est en tant que tel:
public override void DataBind()
{
if (SpecialMode)
{
.. load from database
}
base.DataBind()
}
Je suis intéressé par l'ordre des base.DataBind(). Je l'ai vu généralement placé en premier, mais après que je charge les données de la base de données: je vais avoir besoin de databind pour obtenir les données à afficher.
Toute contribution à ces considérations sera grandement appréciée.
Pour être clair:
Ce contrôle est un widget sondage. Il recherche généralement et charge le sondage à afficher à partir de l'événement Page_Load. Mais, il a aussi un mode rapports qui permet à la page dans laquelle le contrôle est incorporé de changer l'identifiant du sondage à afficher. Cette propriété ne sera pas initiée dans Page_Load. Ok, une partie de ce bordel est que j'ai une propriété pour un objet, et j'ai aussi une propriété dupliquée pour ViewState mais seulement l'Id.
@DrWily Merci, cela a du sens. Je vais attendre pour voir si je reçois plus de suggestions.Une partie de la complexité vient du fait que je stocke des données d'état en utilisant ViewState mais seulement l'Id mais pour des raisons de commodité, je stocke également un objet dans la propriété, donc quand l'Id change l'autre propriété devrait changer. Mais la première fois, je charge réellement l'Id de l'objet complet. Donc, je ne veux pas vraiment charger l'objet complet sauf si nécessaire. Je vois maintenant que c'est un peu le bordel. –