我有这段代码:
Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
IReport rpt = (IReport)ctrl;
rpt.LoadData();
Panel.Controls.Add(ctrl);
到目前为止,一切都按预期工作。
现在我需要在Button
点击回发事件来获取加载的控件并转换为接口以使用方法,并尝试了这个:
if (Panel.Controls.Count > 0) {
Control ctrl = Panel.Controls[0] as Control;
IReport rpt = ctrl as IReport;
string result = rpt.AMethodToInvoke();
}
此演员表不会发生,我从小组获得的控件是LiteralContol
。
有什么想法吗?谢谢。
答案 0 :(得分:1)
您的面板中是否有其他控件?
也许给你的控件一个ID
Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
ctrl.ID = "UniqueID";
IReport rpt = (IReport)ctrl;
rpt.LoadData();
Panel.Controls.Add(ctrl);
然后在面板上使用FindControl
Control ctrl = Panel.FindControl("UniqueID");
另外,当您动态添加控件时,您需要确保在回发时重新添加它们,否则当您运行FindControl()时它将返回null。