如何动态添加UserControl并强制转换为Interface实现

时间:2012-05-10 09:32:40

标签: asp.net c#-4.0 interface user-controls casting

我有这段代码:

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

有什么想法吗?谢谢。

1 个答案:

答案 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。