如何在asp.net中获取面板的组件?

时间:2014-05-13 15:15:17

标签: c# asp.net panel

我有一个面板,其中包含asp.net的一些组件。我正在根据我的数据生成这些组件(如下拉列表,复选框,文本框等)。

下拉列表示例:

System.Web.UI.WebControls.Panel comboBoxOlustur(ANKETQUESTIONBec bec)
{
    System.Web.UI.WebControls.Panel p = new System.Web.UI.WebControls.Panel();

    Table tb = new Table();
    TableRow tr = new TableRow();
    TableCell tdSoru = new TableCell(), tdComboBox = new TableCell();
    System.Web.UI.WebControls.DropDownList cmb = new System.Web.UI.WebControls.DropDownList();

    tdSoru.Text = bec.QUESTION;
    tdSoru.Width = 350;
    tdSoru.VerticalAlign = VerticalAlign.Top;

    if (bec.WIDTH != null)
        cmb.Width = (short)bec.WIDTH;
    else
        cmb.Width = 200;
    cmb.Height = 18;
    //data operations
    QUESTIONSELECTIONDEFINITIONBlc blc = new QUESTIONSELECTIONDEFINITIONBlc();
    List<QUESTIONSELECTIONDEFINITIONBec> secenekler = blc.GetByAnketQueID(bec.ID,1);

    if (secenekler != null)
    {
        ListItem li;
        li = new ListItem();
        li.Value = "-1";
        li.Text = "--Seçiniz--";
        cmb.Items.Add(li);
        for (int i = 0; i < secenekler.Count; i++)
        {
            li = new ListItem();
            li.Value = secenekler[i].ID.ToString();
            li.Text = secenekler[i].NAME;

            cmb.Items.Add(li);
        }
    }
    //end of data operations
    tdComboBox.Controls.Add(cmb);
    tr.Cells.Add(tdSoru);
    tr.Cells.Add(tdComboBox);
    tb.Rows.Add(tr);
    p.Controls.Add(tb);

    return p;
}

在这一点上,我想达到这个下拉列表以获得它的价值。我如何实现这个?

2 个答案:

答案 0 :(得分:2)

我怀疑最好的方法是适当地命名控件,然后使用FindControl

您可能需要使用FindControl recursively才能轻松搜索多个图层。

根据您的需要,声明跟踪添加的每个控件的变量或变量数组也是有意义的。这种方法可能会以一种无需搜索控件的方式使用,从而提高效率。

答案 1 :(得分:0)

我使用过这样的东西来获取所有子控件:

    private void GetAllControls(Control container, Type type)
    {
        foreach (Control control in container.Controls)
        {
            if (control.Controls.Count > 0)
            {
                GetAllControls(control, type);
            }

            if (control.GetType() == type) ControlList.Add(control);
        }
    }

然后执行以下操作:

    this.GetAllControls(this.YourPanel, typeof(Button));
    this.GetAllControls(this.YourPanel, typeof(DropDownList));
    this.GetAllControls(this.YourPanel, typeof(TextBox));
    this.GetAllControls(this.YourPanel, typeof(CheckBox));