当前位置: 编程技术>.net/c#/asp.net
学习asp.net动态添加控件的方法
来源: 互联网 发布时间:2014-08-30
本文导语: 有这样一个问题: 3个DropDownList和1个按钮,每次单击按钮动态创建3个Label控件并从DropDownList获得值,然后添加到页面。 第一次单击页面中有3个Label,第二次单击有6个,第三次单击有9个,也就是每次单击要在上次的状态下再添...
有这样一个问题:
3个DropDownList和1个按钮,每次单击按钮动态创建3个Label控件并从DropDownList获得值,然后添加到页面。
第一次单击页面中有3个Label,第二次单击有6个,第三次单击有9个,也就是每次单击要在上次的状态下再添加3个。
谁的小脑袋这么聪明呢,居然在控件上做这么大的文章,哈哈。
下面说说俺的想法,可以通过Session来保存上次的状态。
一种解法如下:
1、Test.aspx关键代码:
代码示例:
1
2
3
a
b
c
A
B
2、Test.aspx.cs关键代码:
代码示例:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["Panel1"] != null)
{
int index = this.Form.Controls.IndexOf(Panel1);
this.Form.Controls.RemoveAt(index);
Panel1 = Session["Panel1"] as Panel;
this.Form.Controls.AddAt(index, Panel1);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
Label label = new Label();
DropDownList ddl = this.FindControl("DropDownList" + (i + 1).ToString()) as DropDownList;
label.Text = ddl.SelectedValue;
Panel1.Controls.Add(label);
}
Literal br = new Literal();
br.Text = "
";
Panel1.Controls.Add(br);
Session["Panel1"] = Panel1;
}
{
if (Session["Panel1"] != null)
{
int index = this.Form.Controls.IndexOf(Panel1);
this.Form.Controls.RemoveAt(index);
Panel1 = Session["Panel1"] as Panel;
this.Form.Controls.AddAt(index, Panel1);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
Label label = new Label();
DropDownList ddl = this.FindControl("DropDownList" + (i + 1).ToString()) as DropDownList;
label.Text = ddl.SelectedValue;
Panel1.Controls.Add(label);
}
Literal br = new Literal();
br.Text = "
";
Panel1.Controls.Add(br);
Session["Panel1"] = Panel1;
}
说明:
页面回发时,先记下Panel1在控件树中的位置,并移除它,然后从Session变量获取上次添加后的Panel1,并添加到控件树中原来的位置,在这基础上继续添加新的Label控件。
最后的Button是用来测试的,可以帮助查看添加的位置是否正确,也可以用于检测空回发时是否能维持上次的状态。
关于如何在asp.net中动态添加控件的问题,就会大家介绍到这。
脚本学堂,专心为您每一天。