Bonjour.
J'ai un formulaire qui doit récupérer une liste de messages depuis une base données. Une fois ces messages récupérés, je dois créer (dynamiquement) autant de UserControl qu'il y a de messages. Chaque UserControl possède une boite de texte et un bouton 'SAVE'.
Lorsque la page se charge, je créer NB UserControl, génère un nouvel ID pou chacun, sauvegarde les IDs dans le ViewState et enfin je les ajoute dans un PlaceHolder. Bon ! Jusqu'ici tout va très bien, les controles s'affichent et avec les bonnes valeurs. Où le problème survient c'est ici :
Lors d'un PostBack je re-créer chacun des UC dans le PlaceHolder, et ensuite l'événement OnClick du UC est excéuté, mais le PlaceHolder est à présent VIDE ! Pourquoi ???
Voilà un peu de code du formulaire :
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 private void Page_Load(object sender, System.EventArgs e) { // Postback ? if (!IsPostBack) { // Création des boite de messages ArrayList Component_Name = new ArrayList( ColApp.Count ); this.m_CommentsList.Controls.Clear(); int i = 0; foreach( CMessage p in m_MessageList ) { // Créer un UC UCMessage newBox = (PCPComments)this.LoadControl( "WUC/UCMessage.ascx" ); newBox.EnableViewState = true; // Valeur du message newBox.Message = p; // ID de la Boite newBox.ID = "Message_Box_" + (++i); // Sauvegarder le nom de ce UC Component_Name.Add( newBox.ClientID ); // Ajouter ce UC au PlaceHolder m_PlaceHolderMessage.Controls.Add( newBox ); } ViewState.Add( "COMPONENT_NAME_COMMENTS", (ArrayList)Component_Name ); } else { // Re-créer et réassigner les valeur à l'aide du Viewstate bag ArrayList Component_Name = (ArrayList)ViewState["COMPONENT_NAME_COMMENTS"]; if (Component_Name != null && Component_Name.Count > 0) { for (int i = 0; i < Component_Name.Count; ++i) { UCMessage p = (UCMessage)this.LoadControl( "WUC/UCMessage.ascx" ); p.EnableViewState = true; // Add control to the placeholder m_PlaceHolderMessage.Controls.Add( p ); // ID du UC p.ID = (string)Component_Name[i]; // Valeur du message p.Message = m_MessageList[i]; } } } }
Dans le WebUser control (rien de palpitant...) :
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 private void m_Bt_Save_Click(object sender, System.EventArgs e) { // Mise à jour du message depuis la boite de text } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); this.m_bt_Save.Click += new System.EventHandler( this.m_Bt_Save_Click ); } #endregion
Un gros merci pour votre aide parce que c'est le délire !
Partager