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:
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.
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. }
à 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.
Partager