想要抓取動態產生的控制項的值,要利用到識別的 ID 所以在建立控制項的時候就要指定給它,要使用的時候使用父容器的 FindControl 方法找出控制項
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) {
if ( this.ViewState["TextBoxAdded"] != null
&& (bool)this.ViewState["TextBoxAdded"] == true)
{
AddTextBox();
}
}
}
//動態新增控制項
private void AddTextBox()
{
PlaceHolder1.Controls.Clear(); //先清除所有子控制項
TextBox textbox = new TextBox();
textbox.ID = "DynBox1";//重點是要給他一個ID
PlaceHolder1.Controls.Add(textbox);
this.ViewState["TextBoxAdded"] = true;
}
//事件觸發動態新增控制項
protected void Button1_Click(object sender, EventArgs e)
{
AddTextBox();
}
//取值出來
protected void Button2_Click(object sender, EventArgs e)
{
TextBox tmpbox = PlaceHolder1.FindControl("DynBox1") as TextBox;
Label1.Text = tmpbox.Text;
}
延伸應用(產生多個TextBox):
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
ViewState["Count"] = 0;
else
{
if ( ViewState["ADD"] != null
&& (bool)this.ViewState["ADD"] == true)
{
AddTextBox();
}
}
}
//事件觸發動態新增控制項,並累加值
protected void Button1_Click(object sender, EventArgs e)
{
ViewState["Count"] = ((int)ViewState["Count"]) + 1;
AddTextBox();
}
//動態新增控制項
private void AddTextBox()
{
PlaceHolder1.Controls.Clear(); //先清除所有子控制項
for (int i = 0; i < (int)ViewState["Count"]; i++)
{
TextBox textbox = new TextBox();
textbox.ID = "Dynbox_" + i.ToString(); //使用流水號取ID
PlaceHolder1.Controls.Add(textbox);
}
this.ViewState["ADD"] = true;
}
protected void Button2_Click(object sender, EventArgs e)
{
//讀出PlaceHolder所有是TextBox子控項的text屬性
foreach (Control obj in PlaceHolder1.Controls)
{
if (obj is System.Web.UI.WebControls.TextBox)
{
Response.Write(obj.ID + " = " + ((TextBox)obj).Text + " ;");
}
}
}
文章標籤
全站熱搜

非常謝謝您的分享教學,對我有很大的幫助!