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