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

C# Discussion :

Est il possible de lier une action à un bouton crée dynamiquement?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut Est il possible de lier une action à un bouton crée dynamiquement?
    Bonjour,

    Je suis débutant en C# et je rencontre un petit problème dans le développement d'une console d'administration permettant de déconnecter des users d'une application.

    J'affiche un tableau des utilisateurs connectés et je souhaiterai pouvoir en fin de ligne ajouter un bouton qui déconnecte l'utilisateur en question.


    Je n'arrive pas à lier une action àl'évènement click sur mes boutons crées dynamiquement.

    La solution que j'utilise pour l'instant est d'afficher au dessus de mon tableau une dropdownlist contenant les users connectés et un bouton associé à cette liste qui déconnecte l'utilisateur sélectionné. Cela marche car le bouton en question est déclaré dans ma page .aspx "en dur" et je peux donc lui associer une action à l'évènement _Click dans le InitializeComponent () de ma page aspx.as.

    Je n'arrive parcontre pas à le faire avec un bouton crée dynamiquement.

    Je cherche une solution me permettant d'associer à l'évènement _Click de chacun des boutons crés dynamiquement une fonction prenant l'ID du bouton en paramètre. Afin ensuite d'exécuter ma fonction de déconnexion (qui prend en paramètre l'id du user qui sera celui du bouton) au sein de cette fonction.

    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //dans InitializeComponent
    this.lesboutons.Click +=new System.EventHandler(this.lesboutons_Click(string id));
     
    //détail de la fonction associée à l'évènement Click d'un des boutons
    fonction lesboutons_Click (object sender, System.EventArgs e, string id)
    {
    deconnect(id)//il s'agit d'un appel de service web
    }
    Est ce possible, si oui comment fait on si non y a t'il une solution de contournement???

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu peux utiliser la propriété Tag de ton bouton.
    Quand tu crées un bouton, tu mets dans Tag l'id que tu veux, et dans la callback de click tu récupères l'id en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string id = (sender as Button).Tag.ToString();

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 528
    Par défaut
    J'affiche un tableau des utilisateurs connectés
    Avec un Repeater, une dataGrid, autre ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut
    Bonjour,

    J'utilise un tableau <asp:Table>.

    Skyounette quand j'utilise la complétion (dans microsoft visual sudio 2003) je ne trouve pas la propriété Tag pour mes boutons...

    D'autre part mon principal problème pour l'instant n'est pas tant la récupération de l'ID dans mon callback de Click mais bien comment associer un callback de click a un bouton créer dynamiquement.

    Voici le résumé de mon code :

    --> ma page aspx

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <%@ Page language="c#" Codebehind="WebMainForm.aspx.cs" AutoEventWireup="true" Inherits="CallBrokerServices.WebMainForm" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    	
    <HEAD>
    <title>CONSOLE ADMINISTRATION MATISSE</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <link rel="stylesheet" href="menu_style.css" type="text/css" media="print, projection, screen, tv">
    </HEAD>
    
    <body MS_POSITIONING="GridLayout">
    
    //formulaire
    <form id="Form1" method="post" runat="server">
    
    //le tableau en question
    <asp:Table id="header" GridLines="Both" runat="server" Width="98%">
       <asp:TableRow>
          <asp:TableCell>
                LoginName
          </asp:TableCell>
          <asp:TableCell>
                ServerComputerName
          </asp:TableCell>
          <asp:TableCell>
                ServerPID
          </asp:TableCell>
          <asp:TableCell>
                Colonne avec les boutons de déconnexion
          </asp:TableCell>		
       </asp:TableRow>
    </asp:Table>
    
    //bouton permettant d'afficher la liste des utilisateurs connectés 
    <asp:LinkButton id="matcollect" runat="server">affiche tableau</asp:LinkButton>
    
    //bouton de déconnexion lié à à la dropdownlist
    <asp:Button id="deco" runat="server" Text="DECONNECTER"></asp:Button>
    
    //Drop dow list affichant la liste des ID des users connectés
    <asp:listBox id="DDL1" runat="server" AutoPostBack="false"></asp:listBox>
    
    </form>
    </body>
    </HTML>

    Et voici le code de ma page aspx.cs (en gras l'endroit où je crée mes boutons):


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    using System;
    using System.Globalization;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Web.Security;
    
    namespace CallBrokerServices
    {
       public class WebMainForm : System.Web.UI.Page
       {
          //declaration des webcontrols de la page .aspx
          protected System.Web.UI.WebControls.Table header;
          protected System.Web.UI.WebControls.Button deco;
          protected System.Web.UI.WebControls.LinkButton matcollect;
          protected System.Web.UI.WebControls.ListBox DDL1;
          
    
          #region Web Form Designer generated code
          override protected void OnInit(EventArgs e)
          {
                InitializeComponent();
                base.OnInit(e);
          }
    
          private void InitializeComponent()
          {   
                this.matcollect.Click +=new System.EventHandler(this.matcollect_Click);
                this.deco.Click +=new System.EventHandler(this.deco_Click);
          }
    
          private void deco_Click(object sender, System.EventArgs e)
          {
             //deconnecte le user selectionner dans la dropDownList via l'appel d'un service web
          }
    
          private void matcollect_Click (object sender, System.EventArgs e)
          {
                //recupère la liste des users connectés dans un tableau d'objets via un appel de service web
                object[] listeUsers = réponse service web...
                //nombre de cellules par utilisateur moins la derrière colonne
                int numcells = 3;
                //Header du tableau des utilisateurs
                string[] TableHeader = new string[numcells];
                //utilisé pour parcourir ligne par ligne l'objet retourné par le service web 
                string[] UserItem;
                //nb de lignes du tableau
                int numrows = listeUsers.Length + 1;
                TableRow r;
                // Récupération des données depuis le tableau 
                for (int index = 0; index < listeUsers.Length; index++)
                {
                    // Obtient le user suivant
                    UserItem = (string[])listeUsers[index];
                    // remplissage du tableau
                    r = new TableRow();
                    for (int i = 0; i < numcells; i++) 
                    {
                         TableCell c = new TableCell();
                         c.Controls.Add(new LiteralControl(UserItem[i]));
                         r.Cells.Add(c);
                    }
                    // Ajout de mes boutons de déconnexion
                    button deconnectUser= new Button();
                    deconnectUser.ID=UserItem[0] //ID du user
                    
                    //Comment associer une fonction
    deconnectUser_Click à mon bouton deconnectUser que je viens de créer ????
                    
                    TableCell c = new TableCell();
                    c.Controls.Add(deconnectuser);
                    r.Cells.Add(c);
                    header.Rows.Add(r);
                }
            }
        }
    }
    Merci d'avance pour vos réponses!!

  5. #5
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Et pourquoi le code suivant ne fonctionne pas ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.button1.Click += new System.EventHandler(this.button1_Click);
    private void button1_Click(object sender, EventArgs e)
        {...}

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut
    Bonjour,

    Si je met ce code dans la fonction InitializeComponent(), ce la ne marche pas car cette fonction semble n'initialiser que les composant déclaré en "dur" dans la page .aspx. Il n'ya aucun effet quand je clique sur bouton

    Et si je met ce code à la suite de la création du bouton, il génère une erreur à la compilation sur le "this.button1", il ne reconnait pas button1 comme élément appartenant à la classe.

Discussions similaires

  1. Est il possible de lier une macro à un bouton ?
    Par rimbaut dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/08/2007, 08h17
  2. Réponses: 15
    Dernier message: 24/01/2007, 12h54
  3. Réponses: 2
    Dernier message: 17/08/2006, 14h50
  4. Est-il possible de sélectionner une valeur d'un menu déroula
    Par pontus21 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/05/2005, 09h44
  5. Réponses: 3
    Dernier message: 29/07/2003, 09h38

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