.NET从占位符中的动态创建的控件中检索值

时间:2015-08-19 16:38:51

标签: c# asp.net .net

我有一个.net网络表单,C#后端。

我需要帮助循环遍历占位符中的嵌套控件。我有一个占位符,我基本上基于从存储过程返回的数据动态创建动态表单控件。占位符具有一个即时创建的表。这个表填充了复选框和文本框(它们彼此“附着”,通过id ...没有真正附加,但它们具有相同的数字id组件。)

我需要一些循环遍历占位符的帮助,以及要检测的表: 检查哪些复选框,以及文本框中的数据。并非所有复选框都有文本框。

ASP.NET

<asp:PlaceHolder ID="phMyStuff" runat="server"></asp:PlaceHolder>

C#

using (SqlDataReader dr = cmd.ExecuteReader())
{
    while (dr.Read())
    {
        MyFlag= bool.Parse(dr["MyFlag"].ToString());

        CheckBox CB = new CheckBox();
        CB.Text = dr["StuffName"].ToString();
        CB.ID = dr["StuffID"].ToString();


        TableRow TR = new TableRow();
        TableCell TD = new TableCell();
        TD.Controls.Add(CB);
        TR.Controls.Add(TD);

        if (MyFlag== true)
        {
            TextBox TB = new TextBox();
            TB.ID = string.Format("tb_{0}", dr["StuffID"].ToString());
            TB.Width = 100;
            TableCell TD2 = new TableCell();
            TD2.Controls.Add(TB);
            TR.Controls.Add(TD2);

        }
        myTable.Controls.Add(TR);
    }
}
conn.Close();
conn.Dispose();

phMyStuff.Controls.Add(myTable); 

我在这个循环中的两个数据是:

  1. 要检查的复选框的ID
  2. 在占位符
  3. 中创建的任何文本框的值

1 个答案:

答案 0 :(得分:0)

确保每次使用相同ID的每个PostBack加载数据加载数据并执行以下操作:

protected void btnGetControlIds_Click(object sender, EventArgs e)
{
    GetControlIds(phMyStuff);
}

private void GetControlIds(Control parent) 
{
    foreach (Control ctrl in parent.Controls)
    {
        if (ctrl is TextBox || ctrl is CheckBox)
        {
            Response.Write(ctrl.ID);
        }
        else
        {
            if (ctrl.HasControls())
            {
                GetControlIds(ctrl);
            }
        }
    }
}