私はこのコードを持っています:
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
.
何か案は?ありがとうございました。
回答:
回答№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");
また、動的にコントロールを追加しているので、ポストバックでそれらを再追加していることを確認する必要があります。