2008-11-20 7 views
1

J'ai un UserControl dans un GridView. À quel moment les gestionnaires d'événements personnalisés sont-ils liés à UserControl? S'il vous plaît dites-moi parce que je n'en ai aucune idée.Quand les gestionnaires d'événements personnalisés sont-ils connectés?

Dans le scénario ci-dessous, le gestionnaire d'événements UserCreated est nul au moment où l'événement UserCreated est déclenché, c'est-à-dire pendant la liaison de données. Une fois la page entièrement chargée, les gestionnaires d'événements sont disponibles.

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

page sur laquelle le UserControl est hébergé

/// 
    /// 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 
    } 

Markup pour la page

asp: GridView ID = "keyPersonnelGridView" runat = "server" Colonnes asp : TemplateField ItemTemplate userControl: UserName ID = "personnelLis t » runat = "server" UserGroupName = "Tous les utilisateurs" /ItemTemplate /asp: TemplateField ..rest des balises fermé /asp: GridView

toute bonne âme peut s'il vous plaît expliquer pourquoi mes gestionnaires d'événements ne sont pas présents quand l'événement est déclenché?

+0

Si possible, pourriez-vous mettre vos réponses ici aussi? http://waxtadpole.wordpress.com/2008/11/18/when-are-custom-event-handlers-attached/ –

Répondre

1

Vous devez retourner autour

UserCreatedHandler += UserControl.UserCreated 

Devient

UserControl.UserCreated += new EventHandler(UserCreatedHandler); 

Actuellement, "UserCreatedHandler" a la mauvaise signature pour l'événement UserCreated. Lorsque vous déclarez l'événement UserCreated, vous devez utiliser le générique EventHandler:

public event EventHandler<UserCreatedArgs> UserCreated; 
Questions connexes