ASP.NET中实现定制自己的委托和事件参数类_C#教程(2)
以上OnBubbleEvent方法主要应用于复合控件中,采用冒泡形式处理子控件事件,后面介绍复合控件冒泡处理事件机制时再详细讲解此方法。另外,在控件的翻页栏中预先放置了四个翻页功能的按钮,分别表示“首页”、“上一页”、“下一页”、“末页”,并设置它们的属性CommandName都为“Page”,CommandArgument分别为“ButtonFirst”,“ButtonPrev”,“ButtonNext”,“ButtonLast”。
这样就可以根据按钮的命令和参数确定执行什么样的逻辑。这里仅拿按钮“下一页”(Command="Page"&&CommandArgument="ButtonNext")为例解释一下代码逻辑:
/// <summary>
///
/// </summary>
if (lb.CommandArgument == "ButtonNext")
{
GridPageChangedEventArgs ee = new GridPageChangedEventArgs();
if (this.CurrentPageIndex < this.PageCount - 1)
{
this.CurrentPageIndex += 1;
ee.CurrentPageIndex = this.CurrentPageIndex;
ee.PageCount = this.PageCount;
ee.PageSize = this.PageSize;
this.OnPageIndexChanged(ee);
}
handled = true;
}
代码中首先定义一个页参数类对象,然后通过条件语句判断当前是否是最后一页,如果不是最后一页,则从主控件上读取当前页信息(当前页、页数、页记录数),并赋值给GridPageChangedEventArgs对象,然后以页参数对象作为参数调用this.OnPageIndexChanged方法引发事件。另外,注意LinkButton的CommandName和CommandArgument属性的组合用法。
最后,看一下OnPageIndexChanged方法代码:
/// <summary>
/// </summary>
protected new void OnPageIndexChanged(GridPageChangedEventArgs e)
{
GridPageChangedEventHandler handler1 = (GridPageChangedEventHandler)base. Events[Grid.EventPageIndexChanged];
if (handler1 != null)
{
handler1(this, e);
}
}
此方法的功能是从base.Events对象中取出以Grid.EventPageIndexChanged为Key的事件引用句柄,假如句柄不为null(开发人员注册了翻页事件),则引发事件方法体。
最后,说明非常重要的一点:如果自定义了事件参数类,并要求在开发人员注册的事件体中自动显示改变参数对象的类型,如:
protected void Grid1_PageIndexChanged(object source, GridPageChangedEventArgs e)
{
//… …
}

