locked
UserControl - Retour d'événement. RRS feed

  • Question

  • Bonjour,

    Je suis en ASP.net/Vb

    Dans mon designer j'ai posé une partie demandant :

    • Adresse
    • CodePostal
    • Commune (TB1) (via un bouton : BT1)

    une autre partie concernant la facturation :

    • Adresse
    • CodePostal
    • Commune (TB2) (via un bouton : BT2)

    J'ai un UserControl effectuant la recherche de communes via une base de donnée (Commune, CodePostal, CodeInsee) qui propose des résultats et lors de la sélection et validation.

    Le userControl remonte un événement (raiseEvent) lors de cette validation.

    Je sais faire appel lors du clic sur le bouton à l'affichage du UserControl :

    En gros, Je mets visible= true le panel contenant le usercontrol lors de l’événement sur BT1 et sur BT2

    Mais comment je sais lors du retour via mon événement de mon userControl que "appelant" est à mettre à jour ? c'est à dire si je dois mettre le nom de la commune sélectionné dans le TB1 ou le TB2 ?

    Merci.

    jeudi 13 mars 2014 13:50

Réponses

  • En fait, on a pour habitude (peut-être mauvaise) d'utiliser nos usercontrol comme des Popups

    On les mets dans des panels, qui deviennent visible lors du clic sur le bouton et masque l'arrière plan via un fondu (div) donc le second bouton est inaccessible tant que le UserControl est présent.

    Le but étant de ne pas avoir plusieurs UserControl pour un traitement similaire, et de l'utiliser dans une autre page par exemple.

    J'avais pensé mettre aussi un viewstate("Appelant_pWucCommune")="BT1"

    Et lors de l'attachement de ma page à l’événement "Valider", le passer à Nothing et accéder à la sélection faite dans le userControl.

    Il n'y donc pas d'autre moyen, comme d'attacher l’événement retour au bouton "appelant".

    • Proposé comme réponse Aurel Bera vendredi 14 mars 2014 12:05
    • Marqué comme réponse Aurel Bera lundi 17 mars 2014 11:16
    jeudi 13 mars 2014 15:41

Toutes les réponses

  • Bonjour,

    Tout dépend de ton fonctionnement en fait. Car il manque un détail dans ton explication :

    Qu'est ce qu'il se passe si je clique sur BT1 et ensuite sur BT2 ?

    Si le but est 2 affichages, il te faudra donc 2 user control, avec chacun son événement de retour, et donc là ce n'est pas difficile de trouver ou définir ta valeur.

    Si c'est un seul user control pour ces deux boutons (comme ça a l'air d'être le cas), il te faudra garder quelque par l'information de quel bouton il a cliqué.

    J'opterai donc pour une propriété dans ta page de ce genre :

    private Boolean IsFacturationSelected { get { return ViewState["isFacturationSelected"] == null ? false : (Boolean)ViewState["isFacturationSelected"]; } set { ViewState["isFacturationSelected"] = value; }}
    A setter lors du clic sur BT1 ou BT2, et à récupérer lors du retour de l'événement.

    • Proposé comme réponse Aurel Bera vendredi 14 mars 2014 12:05
    • Non proposé comme réponse Aurel Bera vendredi 14 mars 2014 12:05
    jeudi 13 mars 2014 15:16
  • En fait, on a pour habitude (peut-être mauvaise) d'utiliser nos usercontrol comme des Popups

    On les mets dans des panels, qui deviennent visible lors du clic sur le bouton et masque l'arrière plan via un fondu (div) donc le second bouton est inaccessible tant que le UserControl est présent.

    Le but étant de ne pas avoir plusieurs UserControl pour un traitement similaire, et de l'utiliser dans une autre page par exemple.

    J'avais pensé mettre aussi un viewstate("Appelant_pWucCommune")="BT1"

    Et lors de l'attachement de ma page à l’événement "Valider", le passer à Nothing et accéder à la sélection faite dans le userControl.

    Il n'y donc pas d'autre moyen, comme d'attacher l’événement retour au bouton "appelant".

    • Proposé comme réponse Aurel Bera vendredi 14 mars 2014 12:05
    • Marqué comme réponse Aurel Bera lundi 17 mars 2014 11:16
    jeudi 13 mars 2014 15:41
  • (oups, c'est du VB, j'avais vu mais ça m'est vite passé ^^')

    "Mauvaise habitude" ? Bonne question mais je ne pense pas. Si ça peut te rassurer dans l'application dont on s'occupe on fait la même chose. Pour les mêmes raisons que toi. Une popup est appelé sur plusieurs pages. De plus au niveau maintenabilité c'est bien meilleur.

    Sinon pour te répondre, donc il y a cette méthode que tu viens de citer en sauvegardant l'info dans le viewstate.

    Il y a aussi le fait de faire 2 popups. Il y a une certaine logique étant donné que l'appel se fait de 2 événements différents, avec 2 retours différents. Mais un peu lourd pour un même contenu, on est d'accord.

    Sinon je pensais aussi à un delegate (c'est possible en VB ?). Il sera défini lors de l'appel à l'ouverture de la popup dans une propriété du user control. De cette façon lors de la validation il appellera ce delegate en question. Mais on en revient à sauvegarder le delegate quelque part (ViewState ?), et ça j'ignore si c'est faisable simplement (j'ai jamais eu besoin d'utiliser cette technique jusqu'à maintenant).

    Personnellement par rapport à ce que j'ai connu on a tendance à utiliser le ViewState au niveau des propriétés de la page. C'est vrai que c'est pas l'idéal, a moins que quelqu'un propose mieux. =)

    jeudi 13 mars 2014 16:21
  • Oui, c'est du VB ;-) question de temps de dev... quand tu doit tout recasser le travail d'y a 15 jours pour tout refaire... on est plutôt orienté développement rapide (c'est pour de l'interne à la société)

    Pour les habitudes, c'est une question que je me pose souvent, comment fais-t'on ailleurs ? étant donné que je n'ai développé que de l'ASP.Net/Vb/SQL qu'ici et que donc tu t'inspire du code existant pour "poursuive" peut-être de la mauvaise manière car tu ne connais que comme ça...

    Puis on a pas le temps de se faire ses classes etc... ni de migrer les projets (je code encore sous VS2005 et pour une question de temps pas vraiment en objet...) et j'ai des dizaines d'applis à maintenir (on est que 2 développeurs)

    Je sais que les délégués sont possible en VB mais voilà j'ai eu du mal à comprendre pourquoi toutes ces "fonctions" pour un événement. J'ai tenté de faire un exemple en VB à partir d'un tuto C# une fois (Youtube / tutos de Kudvenkat), j'avais posé des question à la personne sans réponse, je n'ai donc pu aller plus loin pour comprendre. Et il manque sur le net (ou je n'ai pas trouvé des projets Asp.Net expliqués ou tutoré).

    Donc si je pars sur de la sauvegarde de l'état en viewstate, mon temps de dev est forcément plus court ;-) (car je suis en estimation de mes tâches de développement) 

    jeudi 13 mars 2014 16:50