exactement : le fonctionnement est simple : j'ai un bouton et quand je clique dessus, il fait apparaitre une nouvelle textbox. Le probleme c'est que le contenu des autres textbox est perdu
Version imprimable
exactement : le fonctionnement est simple : j'ai un bouton et quand je clique dessus, il fait apparaitre une nouvelle textbox. Le probleme c'est que le contenu des autres textbox est perdu
il faut que tu les stockes quelque part le contenu de tes autres textboxs. ajouter les soit dans le viewstate ou bien utilise une datasource ou utilise le cache.
je suis d'accord avec ta proposition mais quand dois-je faire cette sauvegarde sachant que le textchanged de mes textbox ne semble pas intervenir. existe il un evenement sur la page qui intervient juste avant que la page soit rechargée, à un moment où les composants sont encore presents ?
dans l'evenement page_load tu dois pouvoir récuperer les valeurs de tes textboxs. normalement.
Et pourquoi ne pas le gerer avec du javascript et des champs cachés? c'est bourrin un peu mais cela aura le merite de fonctionner...
Pour conserver les valeurs des controles dynamiques il n'y a rien à faire sinon penser à les recréer au bon moment lors du postback. Tu peux par exemple le faire dans une surcharge de CreateChildControl de la page. Surtout ne pas réinventer le viewstate ce serait dommage ;).
Voici le code d'une page qui contient un bouton et un placeholder, qd on clique sur le bouton j'ajoute une textbox au placeholder. Les valeurs des textbox sont bien conservées d'un postback à l'autre. La seule chose conservée explicitement dans le viewstate est le nombre de textbox à créer :
EDIT: petite correction de codeCode:
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 private int TotalDynamicControls { get { if (ViewState["TotalDynamicControls"] == null) { return 0; } return (int)ViewState["TotalDynamicControls"]; } set { ViewState["TotalDynamicControls"] = value; } } protected override void CreateChildControls() { base.CreateChildControls(); for (int i = 0; i < TotalDynamicControls; ++i) { TextBox tmp = new TextBox(); phHolder.Controls.Add(tmp); //phHolder c'est mon placeHolder } } protected void Button1_Click(object sender, EventArgs e) { TextBox tmp = new TextBox(); phHolder.Controls.Add(tmp); TotalDynamicControls++; }
je teste cela de suite
(merci à tous pour votre aide)
merci Sphax pour ton code, cela marche parfaitement