祖父母ユーザー コントロール top.asxc があります。内部には、ページを 2 つのセクションに分割する radSplitter コントロールがあります。左側のセクションでは、内部に radTreeView があり、右側に right.ascx がある Left.ascx コントロール内にロードします。right.ascx コントロールにはボタンがあり、それをクリックすると、left.ascx コントロールにある radTreeView コントロールをデータバインドします。それはそれを行う方法ですか?
質問する
551 次
1 に答える
0
UserControl
right.ascxからtop.ascx にイベントを渡す必要がありますUserControl
。top.ascxUserControl
には left.ascx のインスタンスがあるため、top.ascx は必要なイベントをトリガーします。これが方法です...
right.ascx.cs ファイル内:
public event EventHandler RightButton_Clicked;
protected void RightButton_Click(object sender, EventArgs e)
{
EventHandler handler = RightButton_Clicked;
if (handler != null)
{
handler(this, new EventArgs());
}
}
top.ascx.cs ファイル内:
private static Control _leftUC;
private static Control _rightUC;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
InitWebUserControls();
}
// Note: if your UserControl is defined in the ascx Page, use that definition
// instead of the dynamically loaded control `_right_UC`. Same for `_leftUC`
private void InitWebUserControls()
{
_leftUC = Page.LoadControl("left.ascx");
_rightUC = Page.LoadControl("right.ascx");
((right)_rightUC).RightButton_Clicked += new EventHandler(RightUC_Event);
}
void RightUC_Event(object sender, EventArgs e)
{
((left)_leftUC ).UpdateControl();
}
left.ascx ファイル内:
public void UpdateControl()
{
leftRadTreeView.Rebind();
}
最終的にイベント引数を top.ascx に渡したい場合は、実装するカスタム クラスを使用するUserControl
代わりに、次のように使用します。new EventArgs()
EventArgs
int myArgument = 1;
handler(this, new RightEventArgs(myArgument));
public class RightEventArgs: EventArgs
{
public int argumentId;
public RightEventArgs(int selectedValue)
{
argumentId = selectedValue;
}
}
EventArgs
次に、具体的な型を確認することで、top.ascx に渡されたイベントをフィルター処理できます。
private void InitWebUserControls()
{
_leftUC = Page.LoadControl("left.ascx");
((left)_leftUC ).LeftButton_Clicked += new EventHandler(Child_Event);
_rightUC = Page.LoadControl("right.ascx");
((right)_rightUC).RightButton_Clicked += new EventHandler(Child_Event);
}
void Child_Event(object sender, EventArgs e)
{
if( e is RightEventArgs)
{
((left)_leftUC).UpdateControl();
}
else if (e is LeftEventArgs)
{
((right)_rightUC).ClearSelection();
}
}
于 2012-11-02T14:08:38.690 に答える