Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
681 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  probleme avec les placeholder

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme avec les placeholder

n°1233614
schmur
Posté le 28-10-2005 à 15:39:28  profilanswer
 

Bonjour,  
j'ai un petit soucis avec des composants créés dynamiquements.  
En fait, je veux que l'utilisateur puisse saisir un nombre indéfinit de textbox. (en vrai c'est pas des textbox mais le principe doit etre le meme)  
A chaque fois qu'il clique sur un bouton "ajouter" un noueau textbox doit apparaitre en conservant les anciens.  
Si jamais l'utilisateur clique deux fois, ca marche plus. En fait, il pert chaque textbox deja créer ainsi que la valeur de ce textbox.  [:iana]  
Comment faire pour qu'il reste présent.  
Merci d'avance

mood
Publicité
Posté le 28-10-2005 à 15:39:28  profilanswer
 

n°1233659
WhyMe
HFR ? Nan, connais pas ...
Posté le 28-10-2005 à 16:13:50  profilanswer
 

Tu dois ajouter tes contrôles à la collection de contrôles enfants de ton contrôle parent

n°1233662
schmur
Posté le 28-10-2005 à 16:18:19  profilanswer
 

heu c'est à dire ?
je comprend pas trop

n°1233667
nraynaud
lol
Posté le 28-10-2005 à 16:27:25  profilanswer
 

placeholder.Controls.Add(new TextBox())
 
(enfin preque quoi, il faudra configurer la textbox aussi).


---------------
trainoo.com, c'est fini
n°1233699
schmur
Posté le 28-10-2005 à 16:52:31  profilanswer
 

c'est exactement ce que je fais. Puis qd je reload la page pour rajouter encore un texbox il perd celui juste avant

n°1233700
nraynaud
lol
Posté le 28-10-2005 à 16:53:51  profilanswer
 

pkoi reload ? tu parles du postback ?


---------------
trainoo.com, c'est fini
n°1233704
schmur
Posté le 28-10-2005 à 16:58:36  profilanswer
 

j'ai un bonton "ajouter" qui devrai permettre à chaque click créer un nouveau textbox. Donc c'est un postback.

n°1233708
titione
addicted
Posté le 28-10-2005 à 17:01:20  profilanswer
 

c pas une histoire de viewstate ??

n°1233715
schmur
Posté le 28-10-2005 à 17:04:38  profilanswer
 

voila le code  

Code :
  1. private void Page_Load(object sender, System.EventArgs e)
  2.  {
  3.   // Placer ici le code utilisateur pour initialiser la page
  4.  }
  5. private void btNew_Click(object sender, System.EventArgs e)
  6.  {
  7.   nb=nb+1;
  8.   Response.Write(nb.ToString()); 
  9.   TextBox r=new TextBox();
  10.   r.ID="test"+nb.ToString() ;
  11.   r.EnableViewState=true;
  12.   RadParagraphe.Controls.Add(r);
  13.  }

n°1233717
nraynaud
lol
Posté le 28-10-2005 à 17:04:45  profilanswer
 

on peut voir le code ?
 
titione > non pas là dessus, le truc par défaut suffit.


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 28-10-2005 à 17:04:45  profilanswer
 

n°1233719
nraynaud
lol
Posté le 28-10-2005 à 17:05:31  profilanswer
 

t'as pas de on_init ?


---------------
trainoo.com, c'est fini
n°1233723
schmur
Posté le 28-10-2005 à 17:06:59  profilanswer
 

et voili le on_init  

Code :
  1. override protected void OnInit(EventArgs e)
  2.  {
  3.   //
  4.   // CODEGEN : Cet appel est requis par le Concepteur Web Form ASP.NET.
  5.   //
  6.   InitializeComponent();
  7.   base.OnInit(e);
  8.  }

n°1233724
nraynaud
lol
Posté le 28-10-2005 à 17:08:18  profilanswer
 

et InitializeComponent ?


---------------
trainoo.com, c'est fini
n°1233729
schmur
Posté le 28-10-2005 à 17:11:31  profilanswer
 

il y a plus rien apres ca ;-)

Code :
  1. private void InitializeComponent()
  2.  {   
  3.   this.btNew.Click += new System.EventHandler(this.btNew_Click);
  4.   this.Load += new System.EventHandler(this.Page_Load);
  5.  }


Message édité par schmur le 28-10-2005 à 17:12:56
n°1233741
nraynaud
lol
Posté le 28-10-2005 à 17:19:11  profilanswer
 

tu peux virer le r.enableViewstate stp ?


---------------
trainoo.com, c'est fini
n°1233777
titione
addicted
Posté le 28-10-2005 à 17:55:54  profilanswer
 

on y vient... ;)

n°1233983
schmur
Posté le 29-10-2005 à 02:50:25  profilanswer
 

j'avais essayer sans au debut.
Puis j'ai mis a true et à false sans resultat. Ca viens pas de la

n°1234718
schmur
Posté le 31-10-2005 à 08:58:25  profilanswer
 

pas d'autre idée ?

n°1235577
_Mose_
Lonesome coder
Posté le 01-11-2005 à 12:23:01  profilanswer
 

C'est normal, c'est lié au fonctionnement du ViewState.
Fonctionnement normal :
- Chaque controle a un ID.
- Au PostBack, les velurs de chaque contrôle sont sauvées dans le ViewState, identifiée par cet ID.
- A la re-création de la page, ASP.Net parcours l'arbre des contrôle, et rempli, avec les données du ViewState, ceux dont il reconnait l'ID.
 
Dans ton cas :
- Tes TextBoxes sont bien sauvées dans le ViewState.
- Elles sont identifiées dans le ViewState par leur ID.
- A la re-création de la page, ASP.Net ne trouve pas tes textboxes et ne peut pas les remplir.
 
Solution :
1 - Il faut les recréer à la main à chaque Page_Load()
2 - Il faut forcer leur ID si tu veux être sûr qu'il soit le même d'un postback à l'autre.
3 - Il faut stocker ces ID entre les psotback (dans le ViewState par exemple)

Code :
  1. private void Page_Load(object sender, System.EventArgs e)
  2. {
  3. // Essaye de récupérer les textboxes existantes dans le ViewState  
  4. object data = ViewState["myTextBoxes"];
  5. if(data != null)
  6. {
  7.  // on cast tout ça en tableau de chaînes
  8.  string []myIDs = (data as string []);
  9.  if(myIDs != null)
  10.  {
  11.   // pour chaque chaine
  12.   foreach(string ID in myIDs)
  13.   {
  14.    // créer la txtbox
  15.    TextBox txt = new TextBox();
  16.    // lui forcer son ID
  17.    txt.ID = ID;
  18.    // et la rajouter au PlaceHolder
  19.    this.PlaceHolder1.Controls.Add(txt);
  20.   }
  21.  }
  22. }
  23. }
  24. // Le code du bouton 'Ajouter'
  25. private void Button1_Click(object sender, System.EventArgs e)
  26. {
  27. // Créer la textbox
  28. TextBox txt = new TextBox();
  29. // Lui donner un ID arbitraire et unique
  30. txt.ID = "textbox"+this.PlaceHolder1.Controls.Count;
  31. // La rajouter au placeHolder
  32. this.PlaceHolder1.Controls.Add(txt);
  33. ArrayList list = new ArrayList();
  34. // Pour chaque control dans ce place holder
  35. foreach(Control ctrl in this.PlaceHolder1.Controls)
  36. {
  37.  // Si c'est une textbox
  38.  TextBox mytxt = ctrl as TextBox;
  39.  if(mytxt != null)
  40.   // le rajouter dans la liste des IDs à sauver
  41.   list.Add(mytxt.ID);
  42. }
  43. // Mettre à jour le contenu du ViewState
  44. ViewState["myTextBoxes"] = (string [])list.ToArray(typeof(string));
  45. }

n°1459570
drfrag
Posté le 18-10-2006 à 14:33:59  profilanswer
 

Je ne suis pas certain que cette sauvegarde manuelle des ID soit obligatoire.
 
Je m'explique, j'ai justement un problème qui me fait dire le contraire.
 
J'ai deux pages ASP, avec un placeholder chacune. L'une d'elle ne perd rien au postback. (La proprièté controls contient bien les bonnes choses) alors que l'autre perd tout (il n'y a plus de placeholder au postback).
Pourtant les deux placeholder sont rempli de la même façon (meme fonction) et il n'y a pas plus de sauvegarde des ID dans la 1ere page que dans le 2ème.
Il y a quelque chose qui m'echappe mais ca marche quand même. Il faudrait que j'arrive à trouver pourquoi...
 
 
EDIT : Dans la premiere page la fonction de creation du placeholder était appellé à chaque postback. C'est pour cela qu'il etait toujours là. Il suffit donc de reattribuer les memes ID dans cette fonction et ca devrait marcher.


Message édité par drfrag le 18-10-2006 à 15:11:29

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  probleme avec les placeholder

 

Sujets relatifs
SQL loader problemeProblème Requete / Timestamp
Problème de flash(réglé merci djok_fb)Problème de cookie chez OVH
Problème d'enregistrement des données dans une classeProblème Switch Get Page & EasyPHP
probleme de variable dans un menuprobleme formulaire......
Spip : problème d'installationProbléme avec une requete
Plus de sujets relatifs à : probleme avec les placeholder


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR