我有一个面板,其中包含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;
}
在这一点上,我想达到这个下拉列表以获得它的价值。我如何实现这个?
答案 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));