Bonjour !
Je suis actuellement en train de développer une sorte de planning. La page se compose en gros d'une BulletedList (avec DisplayMode="LinkButton") mise en forme pour ressembler à des onglets, qui me permet de choisir une date (7 jours affichés + semaine suivante/précédente), et d'un contrôle Table pour afficher le planning à proprement parler.
J'ai créé des propriétés (qui tapent dans le ViewState) me permettant de connaître la date sélectionnée, et des fonctions pour remplir ma table (loadTable()) et mettre à jour les onglets (initOnglets()).
Dans mon page_load, j'appelle ces deux fonctions, postback ou non (normal, il faut les recréer à chaque postback)
L'évènement OnClick de la BulletedList se contente de mettre à jour l'affichage des onglets selon le lien sur lequel on a cliqué.
Seulement, dans ma table chaque case doit être cliquable, j'ai donc créé des linkButton depuis mon codeBehind dans la fonction de création de la table :
Bon, jusque là tout va bien. J'aurais bien utilisé un repeater mais j'ai d'autres traitements compliqués à exécuter après pour que l'affichage soit ok.
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 protected void loadTable() { // ... // Dans une boucle tr = new TableRow(); td = new TableCell(); td.Text = reader.GetString(1); td.CssClass = "terrain_case"; tr.Cells.Add(td); for (int i = 8; i < 22; i++) { td = new TableCell(); td.CssClass = "dispo_case"; // On met tout en dispo par défaut td.Controls.Add(new LinkButton()); ((LinkButton)td.Controls[0]).Text = "<img src=\"" + ResolveClientUrl("~/Resources/images/icon_accept.gif") + "\" alt=\"Libre\"/>"; ((LinkButton)td.Controls[0]).Attributes.Add("class", "tab_resa_lien"); ((LinkButton)td.Controls[0]).Click += new System.EventHandler(this.resa_Click); tr.Cells.Add(td); } tblDispos.Rows.Add(tr); //... }
Toutes mes fonctions marchent bien dans leur coin, mais quand je mets tout ensemble j'ai un léger problème, c'est à dire que parfois je dois cliquer deux fois pour que mon tableau soit mis à jour.
Après débug et grattage de crâne, j'en suis venu à la conclusion que, le page_load s'exécutant avant mes évènements, celui-ci remplit bien ma table, mais avec les valeurs d'avant le clic. Quand l'évènement click est traité, les paramètres stockés dans le ViewState sont changées, mais comme l'affichage est déjà effectué, ce n'est pas pris en compte.
Je cherche sur le net depuis hier mais je n'ai pas encore réussi à régler le problème :/
Comment puis-je faire ?
Merci !
Partager