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 :

Gestion d'évènement de boutons générés en fonction de la base de données


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Par défaut Gestion d'évènement de boutons générés en fonction de la base de données
    Bonjour à tous,

    Je travaille actuellement sur une application web nécessitant l'utilisation d'une base de données. Ainsi, Lors du chargement d'une page ou d'un click de bouton sur la page internet, la base de données est consultée, et je peux ainsi moduler ma page en fonction de cette dernière.

    Lors du chargement d'une des pages du site, je cherche combien de boutons de dois afficher en consultant la BDD. J'instancie ces boutons et les abonne à un évènement de click. Jusque ici tout roule.

    Maintenant, j'instancie de nouveaux boutons, lors de l'évènement précédemment crée, je les renomme et les abonne à un nouvel évènement de click. Le problème, c'est que lorsque je click sur ces boutons, ils déclenchent l'évènement "Page_Load" plutot que mon évènement proprement dit.

    Voici mon code :


    Code c# : 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
            protected void Page_Load(object sender, EventArgs e) 
            {
     
                Users currentUsers = Users.GetInstance();
                check_info GetButtonNames = new check_info();
                string[] buttonNames = GetButtonNames.DBOutput("SELECT Bubble.BubbleName FROM Bubble WHERE (Bubble.IDUser = ' " + currentUsers.UserID + "');");//Ici la requète pour avoir les noms des bulles----------------------
     
                // Génération des Boutons
                for (int i = 0; i < buttonNames.Length; i++)  // Tant qu'il y a des bulles à afficher
     
     
                {
                    Button Bubble = new Button();     //on crée un nouveau bouton
                    Bubble.Text = buttonNames[i];     //on le nomme
                    Bubble.Visible = true;            //on le rend visible
                    Bubble.Click += ShowBubble;       //on crée l'évènement 
                    BubbleBar.Controls.Add(Bubble);   //on ajoute le bouton
     
     
                }
     
                Bubble_Name.Visible = false;
                Bubble_Person_Number.Visible = false;
     
            }

    Ainsi après le chargement de la page, j'ai autant de boutons que de "bulles" (donnée de la base).

    interessons nous maintenant à l'évènement ShowBubble auquel je m'abonne.

    Code c# : 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
            protected void ShowBubble(object sender, EventArgs e)
            {
                check_info DB_request = new check_info();
                Button my_button = (Button)sender; // je caste l'objet envoyé en bouton.
     
                string GetbubbleIDReq = "SELECT Bubble.BubbleID FROM Bubble WHERE (Bubble.BubbleName = '" + my_button.Text +"');";
                string[] Id_bubble_Clicked = DB_request.DBOutput(GetbubbleIDReq);
                Bubble_Name.Visible = true;
                Bubble_Name.Text = my_button.Text; // je peux ainsi récupérer le texte de mon bouton cliqué.
                string CountRqst = "SELECT COUNT('HasAContact.IDContact') FROM HasAContact WHERE (HasAContact.IDBubble= ' " + Id_bubble_Clicked[0] + " ');";
                string[] Answer = DB_request.DBOutput(CountRqst);
                Bubble_Person_Number.Visible = true;
                Bubble_Person_Number.Text = Answer[0] + " Contacts";
     
     
                string GetContactListRqst = "SELECT Users.UserFirstName, Users.UserLastName, Users.UserID FROM Users INNER JOIN HasAContact ON (HasAContact.IDContact = Users.UserID) WHERE (HasAContact.IDBubble= '" + Id_bubble_Clicked[0] + "');";
                string[] Contact_List = DB_request.DBOutput(GetContactListRqst);
     
     
    //Je veux maintenant obtenir la liste de contacts dans la liste de la bulle
     
     
                for (int i = 0; i < Contact_List.Length; i+=3) 
                {
                    Label Contact = new Label();
                    Contact.Font.Name = "Maiandra GD";
                    Contact.Text = Contact_List[i] + " " + Contact_List[i + 1];
                    Contact.Text += "<html> <br> </html>";
                    Contact.Visible = true;
                    contactList.Controls.Add(Contact);
     
    // Je crée une liste de contacts
     
     
     
                    Button DeleteContact = new Button();     //on crée un nouveau bouton
                    DeleteContact.Text = "Supprimer de la Bulle";
                    DeleteContact.Visible = true;
                    DeleteContact.Click += Delete_Contact_event;
                    contactList.Controls.Add(DeleteContact);   //on ajoute le bouton
                    DeleteContact.ID = Contact_List[i + 2]; //l'ID du user à notifier
     
     
    // Et les boutons qui vont avec.
     
                }

    Enfin l'évènement auquel je m'abonne avec ces nouveaux boutons:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            protected void Delete_Contact_event(object sender, EventArgs e)
            {
              // il n'y a rien mais si je met un breakpoint ici, il ne détecte rien.
            }
    Voilà, au moment ou je clique sur les boutons instanciés dans "showbubble" il activent l'évènement page_load et pas l'évènement Delete_Contact_event.

    à noter que lorsque j'instancie Tous les boutons dans l'évènement pageload, tout marche.


    Merci d'avance pour votre aide, je ne sais plus ou chercher.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Pas sûr d'avoir tout compris...

    Citation Envoyé par NiToZ
    lors de l'évènement précédemment crée, je les renomme et les abonne à un nouvel évènement de click.
    Juste pour savoir, tu penses bien à désabonner tes boutons du premier événement ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Par défaut
    Je dois mal m'exprimer.

    Essayons autrement ^^.

    Lors du chargement de ma page internet, je regarde combien d'objet "bulle" il y a dans ma base de données.
    Ainsi, avec ce nombre, je peux créer autant de boutons que nécessaires.
    J'abonne tous ces boutons à l'évènement ShowBubble qui se déclanchera au moment du click.

    Jusque ici tout va bien.

    Dans l'évènement showBubble, je regarde combien de personne sont dans la bulle.
    Avec ce nombre, je peux générer une liste de contacts (dans la boucle for),
    créer de nouveaux boutons à coté de chacun de ces contacts, qui serviront à les supprimer de la bulle. J'instancie donc mes boutons, et les abonne à l'évènement Delete_Contact_event.

    Le problème c'est que lorsque je teste le code et que j'appuie sur le bouton "supprimer" (qui s'appelle Delete contact dans le code), l'évènement Delete_Contact_event n'est absolument pas déclenché, c'est page_load qui se déclenche à la place, bien que je ne lui ai rien demandé.

    Ma question est donc : Comment dois-je faire pour que mes boutons s'abonnent bien à l'évènement Delete_Contact_event ? Quelle est la subtilité qui me manque? Ou la grosse boulette d'ailleurs.

    J'espère avoir été plus clair (:

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/11/2010, 11h57
  2. [MySQL] Envoi mail auto en fonction date dans base de donnée
    Par calitom dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 30/06/2008, 15h17
  3. [MySQL] Bouton supprimer une ligne d'une base de donnée
    Par alex13 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 03/02/2007, 18h16
  4. Fonction coder/décoder base de données access
    Par mathias dans le forum Access
    Réponses: 1
    Dernier message: 21/08/2006, 18h46
  5. Réponses: 3
    Dernier message: 30/05/2006, 19h09

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