/ /動的に追加されたUserControlを取得して、インターフェース実装にキャストする方法 - asp.net、c#-4.0、インターフェース、ユーザーコントロール、キャスト

どのように動的に追加されたUserControlを取得し、インターフェイスの実装にキャスト - asp.net、C#-4.0、インターフェイス、ユーザーコントロール、キャスト

私はこのコードを持っています:

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");

また、動的にコントロールを追加しているので、ポストバックでそれらを再追加していることを確認する必要があります。