When are custom event handlers attached?

I have a UserControl inside a GridView. When do custom event handlers attached to a UserControl apply? Please tell me because I have no idea.

In the following script, the UserCreated event handler is null when the UserCreated event is fired, that is, during the DataBinding. Event handlers are available after the page has fully loaded.

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

      

The page that hosts the 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
    }

      

Layout for the page

asp: GridView ID = "keyPersonnelGridView" runat = "server" Columns of asp: TemplateField ItemTemplate userControl: UserName ID = "staffList" runat = "server" UserGroupName = "All users" / ItemTemplate / Asp: TemplateField .. tag overrest closed / Asp : GridView

Can any soul explain why my event handlers are missing when the event is fired?

+1


source to share


1 answer


You need to turn it over

UserCreatedHandler += UserControl.UserCreated

      

Becomes



UserControl.UserCreated += new EventHandler(UserCreatedHandler); 

      

Currently "UserCreatedHandler" has an incorrect signature for the UserCreated event. When you declare the UserCreated event, you must use the generic EventHandler:

public event EventHandler<UserCreatedArgs> UserCreated;

      

+1


source







All Articles