Composite Control ajoutés dynamiquement [Résolu]

Signaler
Messages postés
10
Date d'inscription
vendredi 27 septembre 2002
Statut
Membre
Dernière intervention
25 février 2008
-
Messages postés
10
Date d'inscription
vendredi 27 septembre 2002
Statut
Membre
Dernière intervention
25 février 2008
-
Bonjour,

Mon but est d'ajouter dynamiquement des contrôles dans une page suite à l'action d'un utilisateur.
Pour cela, j'ai créé un CompositeControl qui correspond à ce qui doit être ajouté dynamiquement dans ma page.

Voici el code du composite control :
   
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:TestComposite runat=server></{0}:TestComposite>")]
    public class TestComposite : CompositeControl
    {
        private Label l;
        private TextBox t;
        public DropDownList ddl;


        protected override void CreateChildControls()
        {
            createChild();   
        }


        private void createChild()
        {
            ddl = new DropDownList();
            ddl.Items.Add(new ListItem("Test 1", "1"));
            ddl.Items.Add(new ListItem("Test 2", "2"));
            ddl.Items.Add(new ListItem("Test 3", "3"));
            this.Controls.Add(ddl);


            l = new Label();
            l.Text = DateTime.Now.ToString();
            this.Controls.Add(l);


            t = new TextBox();
            t.Text = DateTime.Now.ToString();
            this.Controls.Add(t);
        }
    }

Voici le code de ma page :

    public partial class Test : System.Web.UI.Page
    {
        public int nb
        {
            get {
                if (ViewState["nb"] == null)
                {
                    ViewState["nb"] = 1;
                }
                return (int)ViewState["nb"];
            }
            set { ViewState["nb"] = value; }
        }


        protected void Page_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < nb; i++)
            {
                PlaceHolder1.Controls.Add(new TestComposite());
            }
        }


        protected void Button1_Click(object sender, EventArgs e)
        {
            nb++;
        }


        protected void Button2_Click(object sender, EventArgs e)
        {
            foreach (Control c in PlaceHolder1.Controls)
            {
                if (c.GetType() == typeof(TestComposite))
                {
                    TextBox1.Text += ((TestComposite)c).ddl.SelectedValue;
                }
            }
        }
    }

Suite au PostBack, l'événément click est avant ma création de controles (logique dans le cycle de vie de la page).
Comment faire pour créer le bon nombre de composite control par rapport au nombre de demande utilisateur.

Merci de votre aide

1 réponse

Messages postés
10
Date d'inscription
vendredi 27 septembre 2002
Statut
Membre
Dernière intervention
25 février 2008

J'ai un trouvé un moyen mais je suis sûr que l'on peut faire mieux.

Dans la méthode Button1_Click j'ai ajouté la ligne suivante PlaceHolder1.Controls.Add(new TestComposite());

Dans ce cas tout marche avec le PostBack, je suis prenneur des autres façon de faire ce que j'ai fait.

Merci