查找动态创建的控件

时间:2013-01-17 17:23:06

标签: c# devexpress

我正在动态创建一个填充了devex单选列表控件并将其添加到页面的HTML表。

//Create the radio list
ASPxRadioButtonList radButt = new ASPxRadioButtonList();
radButt.ID = "audit-" + audType;

tableCell2.Controls.Add(radButt);
tableRow.Cells.Add(tableCell2);
auditTable.Rows.Add(tableRow);

这一切都很好。
现在,在回调中,我想获取该无线电列表并获得其设置...所以我正在尝试这个,但一直都是NULL。

ASPxRadioButtonList audRad = (ASPxRadioButtonList)Page.FindControl("audit-" + audType);

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

问题是Page.FindControl方法不会搜索页面上的所有控件。它只搜索顶层控件。您必须使用Page.FindControlControl.FindControl搜索页面上的所有控件,可能是递归的。

另一点,你的意思是在回发中,或在同一个请求中找到radiobutton?如果你的意思是在回发中,那么你也必须在回发中重新生成控件,就像Aniket所说的那样。

答案 1 :(得分:2)

根据Maarten的回答,这是一个直接从our Master's blog挑选的递归FindControl解决方案:

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
}