stp_7
Messages postés3Date d'inscriptionjeudi 9 juin 2005StatutMembreDernière intervention10 juin 2005
-
9 juin 2005 à 18:17
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 2010
-
12 juin 2005 à 14:52
Salut,
J'ai crée un Custom web control (un time picker avec une dropdown list pour les heures et le minutes).
Cet objet me sert à l'encodage des horraires des membres du personnel. Je voulais simplement faire un controle que l'heure de début est bien inférieur à l'heure de fin sinon je mets le backcolor des listbox en rouge. J'ai donc créer une propriété "isError" dans mon objet et j'enregistre sa valeur dans le Viewstate :
[Bindable(false),
Category("Appearance"),
DefaultValue(false)]
public bool IsError
{
get {return (bool) ViewState["IsError"];}
set {ViewState["IsError"] = value;}
}
Dans ma fonction CreateChildControls, si IsError=true, je mets le backcolor des listbox en rouge.
J'ai un bouton qui fait le PostBack :
si je constate que mon timepicker pour l'heure de début et supérieur à mon TimePicker de l'heure de fin. Je fixe ma propriété IsError des 2 timePicker à true.
Cependant la couleur ne change pas, il faut un second PostBack pour voire le changement (comme si le CreateChildControls est exécuté avant que je change la propriété isError)
Avez-vous l'explication ? Comment faire pour que le comportement soit le même que les autres web control (si je change la couleur d'un texbox dans le bouton PostBack => l'effet est immédiat).
C'est mon premier contrôle Web que je développe, j'ai sans doute fait des erreurs de débutants !
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 9 juin 2005 à 23:38
Je me rappel plus de l'ordre des evenements, mais met un point d'arret
et lance en debug, il me semble que createchildcontrols est effectué
avant le button_click
donc place le code qui change le couleur dans l'evenement render de ton UC :)
stp_7
Messages postés3Date d'inscriptionjeudi 9 juin 2005StatutMembreDernière intervention10 juin 2005 10 juin 2005 à 11:44
Merci pour ta réponse.
Mon controle est un controle composite (2 DropDownList et un Label). J'avais lu (http://samples.gotdotnet.com/quickstart/aspplus/doc/webctrlauthoring.aspx voir Developing a Composite Control ) que je ne devais pas redéfinir la fonction Render car cela est intégré la fonction CreateChilControls.
J'ai trouvé une solution en mettant une fonction public dan mon objet qui rappelle CreateChilControls et là évidemment cela fonctionne mais ce n'est pas très propre .
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 10 juin 2005 à 12:09
A l'occasion, je demanderais à Tkfé qui est un expert dans ce domaine car la je m'en souviens plus
ou sinon si un jour j'ai le temps, je regarderais dans un bouquin.
par contre en faisant ce que je te dis tu ne redefinis pas la fonction
render car oui CreateChildControls fais quelque chose de ce coté, ce
que je te disais c'est juste d'abonner un sub à l'event render tu vois
ce que je veux dire ?
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 12 juin 2005 à 14:52
salut,
pourquoi utiliser le viewstate ?
ton événement est lancé par le bouton.... donc ton isError doit être traité à chaque chargement de la page non ?
donc pas besoin de le stocker dans le viewstate....
essaye de mettre ton changement de couleur dans l'événement Page_PreRender de ta page utilisant ton contrôle.