Когда подключаются пользовательские обработчики событий? - PullRequest
1 голос
/ 20 ноября 2008

У меня есть UserControl внутри GridView. Когда пользовательские обработчики событий присоединяются к UserControl? Пожалуйста, скажите мне, потому что я понятия не имею.

В приведенном ниже сценарии обработчик события UserCreated имеет значение null в момент запуска события UserCreated, т.е. во время привязки данных. После полной загрузки страницы доступны обработчики событий.

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 = "сервер" Колонны жерех: TemplateField ItemTemplate userControl: UserName ID = "staffList" runat = "server" UserGroupName = "Все пользователи" / ItemTemplate / Жерех: TemplateField ..рест тегов закрыт / Жерех: GridView

Может ли какая-нибудь добрая душа объяснить, почему мои обработчики событий не присутствуют при запуске события?

1 Ответ

1 голос
/ 01 марта 2009

Вам нужно перевернуть его

UserCreatedHandler += UserControl.UserCreated

Становится

UserControl.UserCreated += new EventHandler(UserCreatedHandler); 

В настоящее время «UserCreatedHandler» имеет неправильную подпись для события UserCreated. Когда вы объявляете событие UserCreated, вы должны использовать универсальный EventHandler:

public event EventHandler<UserCreatedArgs> UserCreated;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...