Création dynamique de champs [Résolu]

quineman 72 Messages postés jeudi 30 novembre 2000Date d'inscription 10 novembre 2008 Dernière intervention - 22 août 2006 à 20:33 - Dernière réponse : quineman 72 Messages postés jeudi 30 novembre 2000Date d'inscription 10 novembre 2008 Dernière intervention
- 24 août 2006 à 21:48
Je souhaite créer un formulaire dépendant d'un nombre définit par l'utilisateur.
Si l'utilisateur souhaite 6 personnes, alors 6 formulaire de renseignements de personnes doivent apparaitre sur la meme page... Pour cela, il faut que je créé des champs de façon dynamique. Puis que je récupére ces champs pour faire une boucle d'insert.
Je l'ai déjà fait en ASP en utilisant des index pour nommer mes champs et en les récupérant pour créer ma boucle mais en .NET, je ne vois pas du tout comment faire et je ne crois pas que les index pour nommer les champs soit très propres. De plus je sais qu'il existe une méthode duplicate pour les controles...
Personne ne serait m'orienter dans mes recherches, la je bloqueeeeeeeeeeeee

d'avance merci
Afficher la suite 

6 réponses

Répondre au sujet
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 23 août 2006 à 01:23
+3
Utile
Bonjour,

Je viens rapidement de te faire un exemple :

Default.aspx :

<%@PageLanguage="C#"%><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>

 

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<scriptrunat="server">

   

 

    privatevoid Page_Load(Object sender, EventArgs e)

    {

        int countUC;

        if (int.TryParse(Request.QueryString["countUC"], out countUC))

        {

            MultiView1.ActiveViewIndex = 1;

            for (int i = 0; i < countUC; i++)

            {

                Control c = Page.LoadControl("UCPersonne.ascx");

                PHUC.Controls.Add(c);

            }

        }

    }

 

    privatevoid ButtonAddFields_Click(Object sender, EventArgs e)

    {

        Response.Redirect("Default.aspx?countUC=" + TextBoxNbPersonnesToAdd.Text);

    }

 

    privatevoid ButtonAddPersonnes_Click(Object sender, EventArgs e)

    {

        System.Data.DataTable table = new System.Data.DataTable("Personne");

        table.Columns.Add("FirstName", typeof(String));

        table.Columns.Add("LastName", typeof(String));

 

        foreach (Control c in PHUC.Controls)

        {

            if (c isUserControl)

            {

                System.Data.DataRow row = table.NewRow();

                row["FirstName"] = ((TextBox)c.FindControl("TextBoxFirstName")).Text;

                row["LastName"] = ((TextBox)c.FindControl("TextBoxLastName")).Text;

                table.Rows.Add(row);

            }

        }

        MultiView1.ActiveViewIndex = 2;

        GridViewPersonnes.DataSource = table;

        GridViewPersonnes.DataBind();

    }

   

</script>

 

<htmlxmlns="http://www.w3.org/1999/xhtml">

<headrunat="server">

    <title>Untitled Page</title>

</head>

<body>

    <formid="form1"runat="server">

        <div>

            <asp:MultiViewID="MultiView1"runat="server"ActiveViewIndex="0">

                <asp:Viewrunat="server">

                    <asp:TextBoxID="TextBoxNbPersonnesToAdd"runat="server"Text="3"/><asp:ButtonID="ButtonAddFields"

                        runat="server"Text="Generate fields"OnClick="ButtonAddFields_Click"/>

                </asp:View>

                <asp:Viewrunat="server">

                    <asp:PlaceHolderID="PHUC"runat="server"/>

                    <asp:ButtonID="ButtonAddPersonnes"runat="server"Text="Add personnes"OnClick="ButtonAddPersonnes_Click"/>

                </asp:View>

                <asp:Viewrunat="server">

                    <asp:GridViewrunat="server"ID="GridViewPersonnes"AutoGenerateColumns="true">

                    </asp:GridView>

                </asp:View>

            </asp:MultiView>

        </div>

    </form>

</body>

</html>

 

UCPersonne.ascx

<%@ControlLanguage="C#"ClassName="UCPersonne"%>

 

<scriptrunat="server">

 

</script>

 

<asp:LabelID="LabelFirstName"runat="server"AssociatedControlID="TextBoxFirstName"EnableViewState="false">Prénom :</asp:Label><asp:TextBoxID="TextBoxFirstName"runat="server"></asp:TextBox><br/>

<asp:LabelID="LabelLastName"runat="server"AssociatedControlID="TextBoxLastName"EnableViewState="false">Nom :</asp:Label><asp:TextBoxID="TextBoxLastName"runat="server"></asp:TextBox><br/>

<hr/>

C'est une méthode trés crade et je t'interdis de faire aussi sale que moi ;-) mais j'espere que tu comprendras le principe du jeu :-) il y aurais d'autres facons de faire sans passer par un response.redirect mais c'est la facon la plus simple de faire.

<hr />Cyril - MVS - MCP
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jesusonline
mdemo 90 Messages postés mardi 21 mars 2006Date d'inscription 10 mai 2010 Dernière intervention - 23 août 2006 à 01:21
0
Utile
Bonjour,


Tu peux placer dynamiquement des champs en utilisant un PlaceHolder par exemple. Libre à toi de leur attribuer dynamiquement un nom qui te permettra de les récupérer. (ex: user1, user2...address1, address2...)


Mais pourquoi n'utiliserais-tu pas un contrôle serveur type formview (ou autre) ? Tu lui mets dynamiquement un PageIndex à 6 et ça devrait marcher pour toi (si tu es connecté à une base de données). Ca me parait plus simple, mais je n'ai peut être pas bien compris ton besoin.

Good luck.


 


 
Commenter la réponse de mdemo
quineman 72 Messages postés jeudi 30 novembre 2000Date d'inscription 10 novembre 2008 Dernière intervention - 23 août 2006 à 18:34
0
Utile
La piste du formView me parait intéressante mais la ta solution Cyril marche vraiment Nickel, je te remercie de m'avoir débloqué encore une fois. Je te donnerais l'adresse du site quand il sera fini pour que tu me dise ce que tu en pense si ça t'interesse biensur.
MERCI  !!!
Commenter la réponse de quineman
quineman 72 Messages postés jeudi 30 novembre 2000Date d'inscription 10 novembre 2008 Dernière intervention - 24 août 2006 à 18:12
0
Utile
J'ai un problème bizare : mon placeholder ne récupére pas les controles...
Ma boucle ne fonctionne donc pas
For Each c As Control In PHUC.Controls
next c
Quand j'utilise la methode HasControls, il me renvoit false...
Mon place holder est sur ma page, donc pas besoin de le déclarer...
Est ce que ça pourrait être du au fait que je suis en VB.NET ?
Merci
Commenter la réponse de quineman
quineman 72 Messages postés jeudi 30 novembre 2000Date d'inscription 10 novembre 2008 Dernière intervention - 24 août 2006 à 18:24
0
Utile
J'ai essayé d'utiliser ma boucle juste après avoir créé mes controles dans le placeholder et elle marche.
Dans la procedure click qui suit, je ne retrouve plus les controls...
Commenter la réponse de quineman
quineman 72 Messages postés jeudi 30 novembre 2000Date d'inscription 10 novembre 2008 Dernière intervention - 24 août 2006 à 21:48
0
Utile
En fait, excuse, j'avais mal compris le code.
Il faut que le :
Dim c As Control = Page.LoadControl("../ascx/UCPersonne.ascx")
PHUC.Controls.Add(c)
soit dans le page load sinon ca ne marche pas...
Commenter la réponse de quineman

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.