想要抓取動態產生的控制項的值,要利用到識別的 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 + " ;");
        }
    }
}



arrow
arrow
    全站熱搜

    Jimmy 發表在 痞客邦 留言(1) 人氣()