簡體   English   中英

如何獲取動態添加的UserControl並投射到Interface實現

[英]How to get dynamically added UserControl and cast to the Interface implements

我有以下代碼:

Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
IReport rpt = (IReport)ctrl;
rpt.LoadData();
Panel.Controls.Add(ctrl);

到目前為止,一切都按預期進行。 現在,我需要在Button單擊postback事件,以獲取已加載的控件,並將其強制轉換為使用方法的接口,然后嘗試以下操作:

if (Panel.Controls.Count > 0) {
   Control ctrl = Panel.Controls[0] as Control;
   IReport rpt = ctrl as IReport;
   string result = rpt.AMethodToInvoke();
}

這種轉換不會發生,並且我從面板上獲得的控件是LiteralContol

有任何想法嗎? 謝謝。

面板中是否還有其他控件?

也許給您的控件一個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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM