【发布时间】:2010-09-23 04:38:51
【问题描述】:
我在 GridView 中有一个 UserControl。 自定义事件处理程序何时附加到 UserControl ? 请告诉我,因为我不知道。
在下面的场景中,在触发 UserCreated 事件时,即在 DataBinding 期间,UserCreated 事件处理程序为空。一旦页面完全加载,事件处理程序就可用。
用户控制
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);
}
托管用户控件的页面
///
/// 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:模板字段 项目模板 userControl:UserName ID="personnelList" runat="server" UserGroupName="All Users" /项目模板 /asp:模板字段 ..其余标签关闭 /asp:GridView
任何善良的人都可以解释为什么我的事件处理程序在事件触发时不存在吗?
【问题讨论】:
-
如果可能的话,你能把你的答案也放在这里吗? waxtadpole.wordpress.com/2008/11/18/…