ja001net
Messages postés10Date d'inscriptionjeudi 19 septembre 2002StatutMembreDernière intervention 1 août 2006
-
24 juin 2006 à 10:43
cs_zarzar
Messages postés38Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 7 juillet 2006
-
28 juin 2006 à 15:34
Bonjour,
J'aimerais créer des contrôles serveur dynamiquement en fonction d'un chiffre entré dans un précédent formulaire (créer 5 TextBox par exemple).
J'ai vu une solution utilisant un PlaceHolder mais elle ne me convient pas car il faudrait que je mette tous les textbox dans le même place holder. Or, je génère du code html en fonction du nombre de textbox désirés (dans mon exemple 5 tableaux html contenant 1 textbox chacun).
J'ai aussi essayé de faire une boucle for en spécifiant un l'id du textbox en fonction de la valeur du compteur (int i), mais ce ne marche pas non plus (l'id est considéré comme invalide par visual studio)
Quelqu'un aurait-il une idée ou une solution à me donner ?
ja001net
Messages postés10Date d'inscriptionjeudi 19 septembre 2002StatutMembreDernière intervention 1 août 2006 24 juin 2006 à 11:55
Bonjour,
Merci de ta réponse.
J'ai essayé cette méthode mais le problème c'est que je dois aussi générer du code html et pas seulement des contrôles.
Il faudrait donc que je génère également le placeholder dynamiquement à l'endroit précis ou je veux mettre le textbox.
Précision : Si l'utilisateur veut créer 5 textbox, je dois générer 5 tableaux HTML qui contiennent 1 textbox chacun soit 5 textbox (le chiffre 5 étant un simple exemple, si l'utilisateur en veut 10 il en aura 10).
La solution que j'ai trouvé pour l'instant c'est d'utiliser un repeater et de mettre un arraylist comme datasource, qui contient autant d'élements que le nombre textbox désirés. Ca marche pas trop mal, mais j'aurais aimé faire plus simple...
preti
Messages postés53Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 7 septembre 2006 26 juin 2006 à 14:58
Pour faire plus simple tu fais un for sur ton nombre de textbox et en même temps que tu crées tes textbox tu crées un htmltable (associé à un htmltablerow et htmltablecell) puis tu places ta checkbox dans ta cell, ta cell dans ta row et ta row dans ton table et ton table dans ton placeholder :-) et le tour et joué ca donne quelque chose du genre :
HtmlTable tbl;
HtmlTableRow row;
HtmlTableCell cell;
HtmlInputText txt;
for(int i=0;i<ton nombre de checkbox;i++)
{
tbl = new HtmlTable();
row = new HtmlTableRow();
cell = new HtmlTableCell();
txt = new HtmlInputText();
txt.ID="txt"+i;
cell.Controls.Add(txt);
row.Cells.Add(cell);
tbl.Rows.Add(row);
Tonplaceholder.Controls.Add(tbl);
}
cs_zarzar
Messages postés38Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 7 juillet 2006 28 juin 2006 à 11:25
bonjour
je suis interessé par ce sujet
j'ai placé moi aussi des contrôles générés dynamiquement dans des HtmlTableCell, puis ...TableRow puis ...Table et enfin j'ai ajouté mon HtmlTable à PlaceHolder1.Controls
j'ai un traitement à faire sur ts mes controles
comment les parcourir maintenant ?
merci bcp d'avance
ja001net
Messages postés10Date d'inscriptionjeudi 19 septembre 2002StatutMembreDernière intervention 1 août 2006 28 juin 2006 à 11:39
Pour récupérer les contrôles que tu as créé dynamiquement tu peux faire une boucle foreach sur PlaceHolder1.Controls.
Chaque itération de ta boucle sera un objet Control à partir duquel tu pourra récupérer les infos qui t'intressent (GetType() : pour savoir le type de controle : textbox, dropdownlist, ... et ID pour savoir quel est le controle en cours par exemple )
cs_zarzar
Messages postés38Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 7 juillet 2006 28 juin 2006 à 12:25
pour être plus précis
en fait c bon à un autre emplacement j'ai pu obtenir mon PlaceHolder avec des contrôles
mais là vient mon soucis de départ
les seuls contrôles que je vois passer dans le foreach est mon HtmlTable
pas mes Texbox, Chekbox, Ddl, ... que j'ai mis dans le HtmlTable
snif
cs_zarzar
Messages postés38Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 7 juillet 2006 28 juin 2006 à 12:37
ah c vrai, je suis un peu c...
désolé
mais faut que je descende "bas" : HtmlTable > TableRow > TableCell > mes controles
y aurait-il un moyen plus pratique (et/ou plus élégant) que 4 foreach imbriqués ?
cs_zarzar
Messages postés38Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 7 juillet 2006 28 juin 2006 à 13:46
lire la valeur d'une textbox (par exemple, savoir que ds la textbox36 j'ai telle valeur)
voir si une checkbox est cochée
changer l'élément sélectionné dans une dropdown
ce genre de chose
ça répond à ta question ?
preti
Messages postés53Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 7 septembre 2006 28 juin 2006 à 14:09
ben disons que l utilisateurs rentre les champs puis lorsque tu fais un postback (donc tu cliques sur submit) tu envois tes infos. Ce qui déclenche le isPostBack à true (tu peux tester sur un if) si oui tu check tes datas style tu fais un Request.Form["ton_champ"]=la valeur entrée etc...
cs_zarzar
Messages postés38Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 7 juillet 2006 28 juin 2006 à 14:35
comment se fait-il que mes controles disparaissent ?
explication : la page est quasi vide au départ
un bouton déclenche la création de mon formulaire (controles dyn) placé dans mon placeholder1
tout apparait
je souhaite déclencher les actions au clic sur un autre bouton
je l'ai créé, double clicqué dessus pour éditer l'event click, qq lignes...
je clique dessus, tout mon placeholder disparait
c'est normal ?
le fait de poster la page fait partir mes controles ?
merci pr ton aide
preti
Messages postés53Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 7 septembre 2006 28 juin 2006 à 15:20
oui, bye bye les contôles il faut que tu appelles la fonction pour afficher tes contrôles aussi dans le postback et désactiver le bouton qui appelle cette fonction pour éviter de regenérer le tout
cs_zarzar
Messages postés38Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 7 juillet 2006 28 juin 2006 à 15:34
oui ca reste un peu flou
je vais détailler ce que j'ai :
une page aspx avec un fileupload et un bouton ok
l'utilisateur mets son fichier (xls pour tout dire) et appuis sur ok
la méthode click rattachée à ok fait le boulot sur le fichier (sauvegarde, plus d'autes trucs)
le fileupload et le bouton ok (dans un panel ts les 2) sont ensuite cachés
puis en fin de méthode lance generateForm()
generateForm() est une méthode qui vient pousser tous les controles dans mon placeholder (évidemment j'ai choisi le dynamique car en fait les controles sont fonction de ce qui a été lu dans le fichier uploadé)
sur la page j'ai donc à ce moment là
un grand formulaire, l'utilisateur peut saisir ce qu'il veut, etc...
et là j'ai ce fameaux bouton qui au clic doit en fait "préregler" certaines dropdown du formulaire tout bien (mode automatique de mon appli en gros)
donc je veux pouvoir accéder mes controles dans la méthode clic de ce bouton et toucher à mon formulaire et le voir comment avant