0

祖父母ユーザー コントロール top.asxc があります。内部には、ページを 2 つのセクションに分割する radSplitter コントロールがあります。左側のセクションでは、内部に radTreeView があり、右側に right.ascx がある Left.ascx コントロール内にロードします。right.ascx コントロールにはボタンがあり、それをクリックすると、left.ascx コントロールにある radTreeView コントロールをデータバインドします。それはそれを行う方法ですか?

4

1 に答える 1

0

UserControlright.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 に答える