子ユーザーコントロールで親ユーザーコントロールメソッドの結果を使用する必要があります.子コントロールでメソッドを見つける方法は?
2 に答える
ユーザー コントロールは、コードをより再利用可能にするために存在します。ユーザー コントロールは任意のページに配置できます。これら 2 つのユーザー コントロールを持つページもあれば、持たないページもあるため、ページに 2 つのユーザー コントロールがあることを保証することはできません。私の意見では、これを行う最善の方法はイベントを使用することです。アイデアは次のとおりです。子ユーザー コントロールが 1 つのイベントを発生させ、このユーザー コントロールが配置されているページがこのイベントを処理し、親ユーザー コントロールのイベントを呼び出します。このようにして、コードは引き続き再利用可能です。
したがって、子コントロールのコードは次のようになります
public partial class Child : System.Web.UI.UserControl
{
// here, we declare the event
public event EventHandler OnChildEventOccurs;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
// some code ...
List<string> results = new List<string>();
results.Add("Item1");
results.Add("Item2");
// this code says: when some one is listening this event, raises this and send one List of string as parameters
if (OnChildEventOccurs != null)
OnChildEventOccurs(results, null);
}
}
そして、ページはこのイベントの発生を次のように処理する必要があります
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// the page will listen for when the event occurs in the child
Child1.OnChildEventOccurs += new EventHandler(Child1_OnChildEventOccurs);
}
void Child1_OnChildEventOccurs(object sender, EventArgs e)
{
// Here you will be notified when the method occurs in your child control.
// once you know that the method occurs you can call the method of the parent and pass the parameters received
Parent1.DoSomethingWhenChildRaisesYourEvent((List<string>)sender);
}
}
最後に、親コントロールで何かを行うメソッドです。
public void DoSomethingWhenChildRaisesYourEvent(List<string> lstParam)
{
foreach (string item in lstParam)
{
// Just show the strings on the screen
lblResult.Text = lblResult.Text + " " + item;
}
}
このようにして、ページはイベントのオーケストレーターとして機能します。
編集
このようなメソッドを作成して、子コントロールで親コントロールを取得できます
public ofparentcontroltype GetParentControl(Control ctrl)
{
if(ctrl.Parent is ofparentcontroltype)
{
return ((ofparentcontroltype)this.Parent);
}
else if (ctrl.Parent==null)
return null;
GetParentControl(ctrl.Parent);
}
メソッドの呼び出しは次のようになります
ofparentcontroltype parent = GetParentControl(this);
if(parent!=null)
var data = ((ofparentcontroltype)this.Parent).methodtocall();
ユーザーコントロールのコードビハインドでこのようなことをします
if(this.Parent is ofparentcontroltype)
{
var data = ((ofparentcontroltype)this.Parent).methodtocall();
}
ここで例を確認してください: 子コントロールから親コントロールのメソッドにアクセスする