1

GridView内にUserControlがあります。カスタムイベントハンドラーはいつUserControlに接続されますか?わからないので教えてください。

以下のシナリオでは、UserCreatedイベントが発生したとき、つまりDataBinding中に、UserCreatedイベントハンドラーがnullになります。ページが完全に読み込まれると、イベントハンドラーが使用可能になります。

UserControl

    public event EventHandler UserCreated;
    public event EventHandler UserSelected;

     /// 
    /// Bubble up the  UserCreated event
    /// 
    protected virtual void OnUserCreated(object sender, UserCreatedArgs e)
    {
        EventHandler handler = UserCreated;
       /* 
            UserCreated above is null during databinding. No handler is present
            A handler is present after page has fully loaded i.e. UserCreated != null
        */

        if (handler != null)
        {
            handler(this, e);
        }
    }

    /// 
    /// Raise the OnDataBindingEvent
    /// 
    protected override void OnDataBinding(EventArgs e)
    {            
        base.OnDataBinding(e);
        InitialiseControl();
    }

    /// 
    /// Initialises the data in the UserControl.
    /// 
    private void InitialiseControl()
    {           
       List userList =
            UserController.GenerateUserNameDropDownList(UserGroupName);
       OnUserCreated(userList);
    }

UserControlがホストされているページ

   /// 
    /// Handles the Load event of the Page control.
    /// 
    protected void Page_Load(object sender, EventArgs e)
    {
         UserCreatedHandler += UserControl.UserCreated
    }

    protected void UserCreatedHandler(object sender, UserControl.UserCreatedArgs e)
    {
          ...handle userCreated event
    }

ページのマークアップ

asp:GridView ID = "keyPersonnelGridView" runat = "server"列asp:TemplateField ItemTemplate userControl:UserName ID = "personnelList" runat = "server" UserGroupName="すべてのユーザー"/ItemTemplate / asp:TemplateField..残りのタグを閉じます/ asp:GridView

イベントが発生したときにイベントハンドラーが存在しない理由を教えてください。

4

1 に答える 1

1

あなたはそれをひっくり返す必要があります

UserCreatedHandler += UserControl.UserCreated

になる

UserControl.UserCreated += new EventHandler(UserCreatedHandler); 

現在、「UserCreatedHandler」のUserCreatedイベントの署名が間違っています。UserCreatedイベントを宣言するときは、汎用のEventHandlerを使用する必要があります。

public event EventHandler<UserCreatedArgs> UserCreated;
于 2009-03-01T04:24:54.603 に答える