1

我有这个代码:

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.

有任何想法吗?谢谢你。

4

1 回答 1

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。

于 2012-05-10T09:42:13.587 回答