我想動態地將runat=server
添加到CheckBoxList
,以便可以通過FindControl
找到它。試圖找到控件
CheckBoxList cbl = new CheckBoxList();
cbl.ID = "cbl" + intQuestionCount.ToString();
// get choices from choice list
int intChoiceListId = Convert.ToInt32(detail.ChoiceListID);
var choiceList = (from cl in _svsCentralDataContext.SVSSurvey_ChoiceListItems
where cl.ChoiceListID == intChoiceListId
orderby cl.Description
select cl);
cbl.DataSource = choiceList;
cbl.DataTextField = "Description";
cbl.DataBind();
cbl.Visible = true;
cbl.CssClass = "PositionCol3";
questionsPanel.Controls.Add(cbl);
我有兩個遞歸查找防治方法:
private HtmlControl FindHtmlControlByIdInControl(Control control, string id)
{
foreach (Control childControl in control.Controls)
{
if (childControl.ID != null && childControl.ID.Equals(id, StringComparison.OrdinalIgnoreCase)
&& childControl is HtmlControl
)
{
return (HtmlControl)childControl;
}
if (childControl.HasControls())
{
HtmlControl result = FindHtmlControlByIdInControl(childControl, id);
if (result != null)
{
return result;
}
}
}
return null;
}
private WebControl FindWebControlByIdInControl(Control control, string id)
{
foreach (Control childControl in control.Controls)
{
if (childControl.ID != null && childControl.ID.Equals(id, StringComparison.OrdinalIgnoreCase)
&& childControl is WebControl
)
{
return (WebControl)childControl;
}
if (childControl.HasControls())
{
WebControl result = FindWebControlByIdInControl(childControl, id);
if (result != null)
{
return result;
}
}
}
return null;
}
屏幕最初是動態創建(如果的IsPostBack!)的基礎上的SQL記錄。在用戶點擊「保存」按鈕後,會顯示該批次後使用FindControl方法。 既不Find控件方法找到我的CheckBoxList!
你已經有了一個服務器端控件,你應該可以在FindControl中直接找到它。 – Andrei
FindControl不是遞歸的,這可能是您遇到的問題:_只有當控件直接包含在指定的容器中時,此方法纔會找到控件;也就是說,該方法不會搜索控件中控件的整個層次結構_ http://msdn.microsoft.com/en-us/library/486wc64h%28v=vs.110%29.aspx – BlackICE
當您遇到什麼事件時創建此控件並將其添加到控件組?猜測,你在頁面生命週期中做得太晚了。 – ThatBlairGuy