IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Ajouter un événement sur un UserControl


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut Ajouter un événement sur un UserControl
    Bonjour,

    Avant de poster j'ai chercher sur le forum ASP.net ... :p

    Donc j'ai créer un UC qui contient des panels et des labels...
    ce UC est créé dynamiquement dans mon app.

    J'aimerais déclencher un événement onClick sur mon UC.
    Sur le controle utilisateur lui meme pas sur un de ses controls.

    si vous avez une idée... je suis preneur bien sûr.


    Bonne soirée

    Jerome

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    tu peux peut etre le mettre sous forme d'un hyperlink?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    Je sais pas trop,

    J'ai rajouté un button dans mon UserControl.
    Le fait est que je génére dynamiquement une vingtaine d'instance de cet user control.
    Et dans ma page aspx où sont générés les UserControl je n'intercepte pas les évenements des UserControls (quand le bouton est cliqué).

    j'aimerai que lorsque qu'un de mes 20 usercontrol déclanche l'event onclick, ma page aspx qui contient les userControls, intercepte l'event et execute une fonction.

    J'ai ajouté un eventHandler dans mon userControl.
    mais je sais pas comment abonné ma webform aux events des userControls générés dynamiquement...

    je sais pas si je suis bien clair...

  4. #4
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    Bonjour,
    Tu peux faire comme cela, je t'ai fait un exemple avec des boutons générés dynamiquements, tous liés à une même méthode contenue dans ton codebehindC# (chez moi elle s'appelle Button1_Click),

    divZAZA est une div sur ma page Web,

    for (int i=0;i<10;i++){
    System.Web.UI.WebControls.Button bt = new System.Web.UI.WebControls.Button();
    bt.Click += new System.EventHandler(this.Button1_Click);
    bt.Attributes.Add("runat","server");
    divZaza.Controls.Add(bt);
    }

    tu peux aussi géré l'évènement en javascript :
    for (int i=0;i<10;i++){
    System.Web.UI.WebControls.Button bt = new System.Web.UI.WebControls.Button();
    bt.Attributes.Add("onclick","javascript:gereclick()");
    divZaza.Controls.Add(bt);
    }
    sans quoi tu dois avoir une méthode javascript gereclick(), qui va (si tu veut faire un appel serveur) générer un __dopostback ou de l'AJAX.

    voila,
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    lorsque tu généres tes usercontrols tu ajoutes un evenement supplémentaire dans ta webform dans le codebehind. evenementOnclick += new event(levenementDeMaNouvelleFenetre)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    D'abord MERCI,

    ensuite, j'ai donc suivi la 1ere méthode de benji_dv,
    mais a la compile j'ai cette erreur :
    "Aucune surcharge pour 'craDaySelected' ne correspond au délégué 'System.EventHandler'"

    "craDaySelected" c'est ma methode comme ta "this.Button1_Click"...

    Une idée ?

  7. #7
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    Oui
    en fait la méthode que tu places dans le new System.eventHandler doit correspondre à la signature des évènements click sur un bouton (la signature est composée du nom de la méthode et de ses paramètres, dans le cas qui nous concerne le problème vien du nombre et du type des paramètres de ta méthode)

    La solution : pour simplifier :

    1. place un bouton sur ta form en mode design, double clic dessus et ca va te créer la méthode dans le code,

    2. tu retournes dans le mode design pour virer le bouton que tu as créé.

    3. tu renommes la méthode qu'il a créé (au point 1) en ce que tu veux comme nom, et tu lance ton code à partir du code de cette méthode.

    4. Dans le new System.eventHandler tu places le nom de cette méthode.

    @+
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    c'est bien ce que j'avais fait...

    le bouton se trouve dans un user control c'est peutetre ca qui dérange ..

    voila ce que j'ai dans mon code behind :

    foreach(...)
    {
    ...
    ucPanelJournee pj;
    pj = ((ucPanelJournee)this.LoadControl("./ucPanelJournee.ascx"));
    ((ImageButton)pj.FindControl("ImageButton_edit")).Click += new System.EventHandler(this.craDaySelected);
    ...
    }

    et ma focntion :

    protected void craDaySelected(object sender, ImageClickEventArgs e)
    {
    ...
    }

    je vois pas trop ...

  9. #9
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    OK
    C'est normal,
    Chaque controle gère les évènements de façon différente,
    un bouton => System.eventHandler,
    une imageBouton => System.Web.UI.ImageClickEventHandler

    donc à la place de new System.eventHandler,
    essaie
    new System.Web.UI.ImageClickEventHandler

    ...
    je compte sur toi pour nous tenir au courrant (bzzz ... c lourd, je sais )
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    bon merci, plus d'errreur de compile mais ma fonction n'est jamais appelér...
    un postBack est fait mais sans passer par ma focntion ...

  11. #11
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    Lorsque tu crées dynamiquement tes controles,
    effectues tu bien l'opération suivante avant l'ajout dans l'écran :

    (instanciation)
    [ton controle dynamiquement créé].Attributes.Add("runat","server");
    (ajout dans l'écran)

    je demande cela car si le controle n'est pas runat=server, aucun évènement ne sera envoyé....

    normalement ca doit marcher, ou alors ya autre chose (sur mon poste de dev sa marche, je viens d'essayer)
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    bah enfait mon imageButon n'est pas créer dynamiquement, il est dans le usercontrol et c'est ce dernier que je crée dynamiquement...
    au depart je voulais ajouter un onClick sur mon userControle entier... ...
    puis j'ai fininalement mis un imageButon dedans...
    je vais vérifier si tout est bien runat serv quand m^me

  13. #13
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    je crois que le plus simple est de faire un onclick sur ton uc,
    en fait on peut faire des onclick sur ce qu'on veut. Le problème peut venir du fait que ton imagebutton est dans un uc.

    essaie en mettant le onclick sur ton uc directement.
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    tous les controls on leur attribut runat sur server...

    je vois pas d'où ca peut vennir

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    un onClcik sur mon UC c'est ce que je voulais faire mais j'ai pas trouver comment ... je vais chercher merci

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    Bon je suis de retour... je trouve pas comment rajouter un evenement OnClick sur mon UserControl...

    Tu m'as dit que l'on peut en ajouter sur tous les controls...

    Je suis prenneur :p

    merci pour tout

  17. #17
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    OK,
    de retour,
    (Jsuis désolé j'ai réalisé les exemples en vb, les passer en C# n'est pas compliqué)
    Oui on peut (en adaptant un peu) faire cliquer tout les controles.
    Faut passer par javascript.
    Dans ton controle, tu insère un HTMLTable (par exemple, car il peut envoyer des évènement click)qui encadre tout le controle (tout le reste est contenu dans l'unique cellule de ton HTMLTable),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <table style="WIDTH: 56px; HEIGHT: 32px" onclick="javascript:__doPostBack('srcTable','click');"
    	height="32" width="56">
    	<tr>
    		<td><asp:label id="Label1" runat="server">0</asp:label></td>
    	</tr>
    </table>
    tu peux voir le __dopostback('','')
    pour les explications concernant le __doPostBack : http://aspalliance.com/895_Understan...Function#Page2
    Le premier paramètre est l'id de l'élément qui réalise le postback, le second est ce que tu veux (par convention),

    Dans ton codebehind du controle, méthode page_load :

    tu ajoutes ce qui faut pour gérer le postback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Select Case Request.Params.Get("__EVENTTARGET")
     
    <div style="margin-left:40px">Case "srcTable"</div>
    <div style="margin-left:40px"><div style="margin-left:40px">RaiseEvent click()</div></div>
    End Select
    Enfin, dans ta page web , tu génère dynamiquement tes controles, et tu ajoute le handler sur le click.
    Comme je n'ai pas défini de paramètres à mon évènement click dans le usercontrol, il ne doit pas en avoir dans la méthode qui s'exécutera lors du click...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            For vl_i = 0 To 5
                vl_oTmpWebUC = Me.LoadControl("./WebUserControl1.ascx")
     
                vl_oTmpWebUC.Attributes.Add("runat", "server")
     
                AddHandler vl_oTmpWebUC.click, AddressOf Me.eventWebUCClick
     
                Me.Controls.Add(vl_oTmpWebUC)
            Next
    Ah oui LAST BUT NOT LEAST : la page doit comporter AU MOINS controle de submit (p ex. un bouton ou un linklabel) pour que la méthode __doPostBack soit générée ! il suffit de la cacher à l'utilisateur...

    Voilou, c'est un poil + compliqué mais ca marche,

    @+
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    bonjour et merci ... donc j'ai essayé de convertir ton code en c#

    Dans mon UC :

    J'ajoute le htmlTable et le on clik:
    <table id="panelJour" onclick="javascript:__doPostBack('panelJournee','click');">
    <tr><td>...mes controles...</td></tr></table>

    Je déclare un event :
    public event EventHandler onClick;

    Je crée ma fonction click() qui declanche mon event
    public void click(object sender, EventArgs e)
    {
    if (e != null)
    onClick(sender, e);

    }

    Dans ma page web :
    je crée mes UC dynamiquement :
    foreach(...){
    ucPanelJournee pj;
    pj = ((ucPanelJournee)this.LoadControl("./ucPanelJournee.ascx"));
    //Abonnement aux evenements
    pj.Attributes.Add("runat", "server");
    pj.onClick += new System.EventHandler(this.craDaySelected);
    }


    J'execute, mais je ne passe pas dans void click(..);

  19. #19
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    Tu as oublié d'implémenter la gestion du postback dans le page_load de ton uc,

    Select Case Request.Params.Get("__EVENTTARGET")

    Case "panelJournee"

    RaiseEvent click()

    End Select

    C'est ce raiseevent qui va générer un évènement qui sera envoyé à la page.

    en C# tu dois gérer cela avec des delegates.

    @+
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    oui je sais mais il ne passe pas par mon page load de mon uc, une fois le click fait la page se recharge et en passant par le pageload de ma page je ne recrée pas les UCs... donc pas de page load...

    je me perd

    mon eventHandler c'est comme pas un délégué ? je débute avec les delegate...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] Ajouter des évènements sur des objets dynamiques
    Par fdthierry dans le forum VB.NET
    Réponses: 6
    Dernier message: 30/09/2011, 17h30
  2. Tracking adsense : ajouter un événement sur une iframe
    Par Galdon dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 29/06/2009, 16h07
  3. Gérer les évènements sur un UserControl
    Par wheelshot dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2009, 15h52
  4. [JTextPane] Ajouter un évènement souris sur un mot
    Par soad dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 20/03/2007, 15h12
  5. [C#]Ajouter un événement sur un UserControl
    Par jbourgeais dans le forum ASP.NET
    Réponses: 1
    Dernier message: 11/01/2007, 19h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo