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
イベントが発生したときにイベントハンドラーが存在しない理由を教えてください。