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 :

Créer un évènement onclick sur un bouton depuis le code-behind


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Points : 7
    Points
    7
    Par défaut Créer un évènement onclick sur un bouton depuis le code-behind
    Bonjour,

    Pour mes besoins, je dois générer dynamiquement un tableau de données depuis le code-behind. Au bout de chaque ligne de ce tableau se trouve un bouton.

    J'aimerais qu'un évènement se déclenche lors du clic sur ce bouton, mais je trouve aucun moyen de faire cela depuis le code-behind.

    Concrêtement, voilà ce que je veux générer depuis le code-behind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <button runat="server" ... onClick="maMethode" />
    Quelqu'un peut-il m'aiguiller sur la solution à appliquer ?

    Merci par avance.

    Edit : J'utilise ASP.NET/VB.NET 2.0

  2. #2
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    Salut,

    C'est quoi ton tableau de données ? Un vrai tableau, une GridView, une ListView ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Johann7751 Voir le message
    Salut,

    C'est quoi ton tableau de données ? Un vrai tableau, une GridView, une ListView ?
    Un tableau simple : Table > TableRow > TableCell. J'ai surtout dit cela pour préciser le contexte, le problème ne provient pas du tableau.

  4. #4
    Membre habitué Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Points : 136
    Points
    136
    Par défaut
    Bonjour,
    En gros si je comprend bien ce que tu veux faire, tu dois utiliser l'événement Click du bouton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Button bt = new Button();
    bt.Click += new EventHandler(bt_Click);
    Remarques : Lorsque tu vas écrire bt.Click +=, Visual va te faire l'autocomplétion automatiquement, il ne reste juste qu'à cliqué sur la touche 'Tab' deux fois pour que le code de l'action se génère automatiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void bt_Click(object sender, EventArgs e)
            {
                throw new NotImplementedException();
            }
    Ensuite fais ce que tu veux dedans en supprimant l'exception levée !

    Bonne chance à toi !

  5. #5
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bonjour,

    Il te suffit d'utiliser un EventHandler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        void Page_Load(Object sender, EventArgs e)
        {
            // Manually register the event-handling method for
            // the Click event of the Button control.
            Button1.Click += new EventHandler(this.MethodBtn_Click);
        }
     
        void MethodBtn_Click(Object sender, EventArgs e)
        {
            // When the button is clicked,
            // change the button text, and disable it.
     
            Button clickedButton = (Button)sender;
            clickedButton.Text = "...button clicked...";
            clickedButton.Enabled = false;
        }

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos réponses.

    Malheureusement, il m'est impossible d'écrire la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bt.Click += new EventHandler(bt_Click);
    Premièrement, intellisense ne me propose pas "Click" sur mon bouton. Si j'écris tout de même cette ligne, alors j'obtiens l'erreur :
    Public Event Click(sender As Object, e As System.EventArgs) est un évènement. Il ne peut donc pas être appelé directement. Utilisez une instruction RaiseEvent pour déclencher un évènement.

  7. #7
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Si tu n'as pas "Click" qui apparaît c'est que tu n'utilises pas un bouton ASP.NET mais HTML. De plus, la syntaxe proposée correspond au C#, pas au VB.Net (mais quelle idée d'utiliser ce langage ? ).

    Donc en gros tu dois faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler bt.ServerClick, AddressOf bt_Click
    En espérant t'avoir aidé.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Nicolas Esprit Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler bt.ServerClick, AddressOf bt_Click
    Je viens également de trouver ceci sur MSDN (du coup le "Click" m'est bien proposé). Malheureusement la méthode indiquée ne se délenche toujours pas. Pourtant la signature est bonne et tout paraît fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim b As New Button()
    b.Text = "monBouton"
    b.PostBackUrl = "xxx"
    AddHandler b.Click, AddressOf MaMethode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub MaMethode(ByVal sender As Object, ByVal e As EventArgs)
            ' ...
    End Sub
    Citation Envoyé par Nicolas Esprit Voir le message
    De plus, la syntaxe proposée correspond au C#, pas au VB.Net (mais quelle idée d'utiliser ce langage ?
    Si cela ne dépendait que de moi, crois-moi que j'aurais choisi C#

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    En fait, le problème vient du fait que je crée plusieurs de boutons de ce type (c'est un tableau donc il y'en a un par ligne). Du coup, la ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler b.Click, AddressOf MaMethode
    est répétée X fois et, au final, rien ne se passe.

    Quelqu'un a-t-il une idée ?

  10. #10
    Membre habitué Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Points : 136
    Points
    136
    Par défaut
    Et que veux tu en faire après lorsque tu lèves l'événement 'Click' ?
    Tu veux réaliser quelque chose de spécial avec la ligne ou afficher quelque chose en rapport avec la ligne ?

    Dans ce cas là tu pourrait passer un argument à ton événement.
    En C#, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bt.CommandArgument = IdDeTaLigne;
    Mais je ne sais pas si ça peut t'intéresser ce bout de code...

    Bonne chance !

  11. #11
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    Grosso modo, je récupères des données dans une base de données. Dans mon code-behind, après avoir récupérés les données, je crée un tableau (Table), puis une ligne (TableRow) pour chaque entrées dans la base.

    Au bout de chaque ligne se trouve un bouton "Supprimer". En cliquant sur ce bouton, je souhaite déclencher une certaine méthode qui me permettra de supprimer cette ligne.

    Cependant, je n'arrive pas à lever la méthode en question à cause du problème précedemment expliqué.

  12. #12
    Membre habitué Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par Daklum Voir le message
    Au bout de chaque ligne se trouve un bouton "Supprimer". En cliquant sur ce bouton, je souhaite déclencher une certaine méthode qui me permettra de supprimer cette ligne.
    Tu devras donc surement passer un argument (par exemple l'id de la donnée de ta base de donnée) pour supprimer la bonne ligne.

    Ensuite pour que l'action se déclenche bien, je ne vois pas trop, mais je pense que l'on t'aidera assez rapidement.

    Bonne chance.

  13. #13
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par blasil64 Voir le message
    Tu devras donc surement passer un argument (par exemple l'id de la donnée de ta base de donnée) pour supprimer la bonne ligne.
    Oui, j'ai réalisé ça en lisant ton précédent message. Jusqu'alors je faisais une redirection en passant le paramètre via l'url, mais je ne trouve pas cela très "propre" niveau code.

    Citation Envoyé par blasil64 Voir le message
    Ensuite pour que l'action se déclenche bien, je ne vois pas trop, mais je pense que l'on t'aidera assez rapidement.

    Bonne chance.
    Merci pour ton aide

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    si tu utilise CommandArgument ce n'est plus l'évènement onClick qu'il te faut, mais un autre évènement comme Command par exemple...

    en effet, le CommandArgument n'es utilisé que dans le cadre d'une "commande spécifique", il faut donc un argument, une "commande" et l'évènement reçoit une structure avec les 2.

    donc :

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AddHandler bt.Command, AddressOf button_Command
    bt.CommandArgument = "truc"

    ça c'est le profil de ta méthode button_Command
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Protected Sub button_Command(ByVal source As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)

    si mes souvenirs sont bon, ca fait des lustres que j'ai pas utilisé ca, ou je les utilise dans les repeater donc... ca change légèrement la donne.

Discussions similaires

  1. évènement onclick sur boutons radio
    Par piotrowski-s dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/03/2012, 15h36
  2. évènement onclick d'un bouton
    Par brudao dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/02/2009, 09h47
  3. Créer un événement listener sur un onPress
    Par jeremie74 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 27/09/2007, 12h13
  4. événement onclick sur une case de tableau
    Par Mathieu72 dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 25/03/2007, 17h24
  5. OnClick sur un bouton créé dynamiquement
    Par Jeankiki dans le forum Delphi
    Réponses: 4
    Dernier message: 05/11/2006, 18h44

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