访问以编程方式创建的控件

时间:2014-01-13 13:49:35

标签: c# asp.net panel

我在占位符中创建了一系列面板,每个面板内有5个文本框。

按下按钮,我想从每个文本框中获取.Text,以及Panel的ID。我计划使用JaggedArray来跟踪所有Panel及其内部TextBox。

    string[][] jaggesaddress = new string[stop][]; //stop is an int and equal to amount of panels on screen.
    String[] numbers = new String[stop];

    int a = 0;

    //Control ctrl;

    foreach (Control ctrl in BookingPlaceholder.Controls) //BookingPlaceholder is placehodler ID
    {
        if (ctrl is Panel)
        {
            numbers[a] = ctrl.ID;
            a++;
            //ctrl.ID = numbers[a];

            foreach(TextBox tb in ctrl.ID)  // error here
            {

            }
        }
    }

然而,第二个foreach循环有一个错误,我不是100%肯定如何克服这个。

  

“无法将类型'char'转换为'System.Web.UI.WebControls.TextBox'”

我知道数字[a]确实找到了第一个面板,但它是一个没有ID扩展名的字符串。

任何建议都表示赞赏。

  • 约什

2 个答案:

答案 0 :(得分:4)

您的内部循环正在尝试遍历字符串。你想要的是......

foreach(TextBox tb in ctrl.Controls.OfType<TextBox>())

而不是

foreach(TextBox tb in ctrl.ID)

答案 1 :(得分:3)

如果PlaceHolder中有更多通用控件可用 你需要找到文本框控件。因此,检查控制类型也是安全的。

foreach (Control ctr in ctrl.Controls)
        {
            if (ctr is TextBox)
            {
                //Do your things
                // ((TextBox)ctr).Text 
            }
        }