ASP.NET自定义控件 第十天 实现分页功能的DataList
1. 引言 在ASP.NET中DataList可以实现数据展示,我们可以通过定制其模版实现丰富 的格式,但是美中不足的时DataList默认情况下不支持分页,我们当然可以编写 一个用户控件以实现分页功能,但是这种方案仍然不是很好,我们希望像使用普 通ASP.NET服务器端控件一样,只需要放置一个DataList并设置分页样式就可以输 出分页链接。 在上次任务中我们创建了DataPager类将创建分页的操作从GridView分离出来 ,本次任务将尝试重用DataPager类为DataList增加分页特性。 2. 分析 开发自定义GridView控件时,可以通过向控件中加入具有特定CommandName的 按钮实现分页,但是对于DataList却不适用,因为DataList不能接收到客户端的 回发事件,这也是DataList类和GridView类的一个区别—DataList类没有实现 IPostBackEventHandler接口。为了能够使DataList接收客户端回发并触发分页事 件,需要使自定义DataList实现IPostBackEventHandler接口,并使用自定义事件 参数类在触发事件时传递页码信息。 IPostBackEventHandler接口定义了ASP.NET服务器控件为处理回发事件而必须 实现的方法,它的成员只有一个方法: void RaisePostBackEvent(string eventArgument) 该方法由类实现时,使服务器控件能够处理将窗体发送到服务器时引发的事件 。 接下来需要考虑如何在客户端引起回发事件,即怎样生成回发脚本。这里使用 到了ClientScriptManager类,该类作为Page类的一个属性ClientScript出现,通 过调用该类的GetPostBackClientHyperlink方法生成客户端脚本以引起回发,该 方法有两个形式的重载: GetPostBackClientHyperlink (Control, String) 获取一个引用,并在其开头附加 javascript:,可以在客户端事件中使用该引 用,并将该引用与指定的事件参数一起使用,以便回发到指定控件的服务器。 GetPostBackClientHyperlink (Control, String, Boolean) 获取一个引用,并在其开头附加 javascript:,该引用可用于在客户端事件中 回发到指定控件的服务器,回发时使用指定的事件参数和一个指示是否为事件验 证注册该回发的布尔值。 其中第一个参数指明了处理回发的服务器控件,第二个参数代表传递给服务器 控件的参数,第三个参数代表是否验证注册回发事件。 接下来编写实现代码。 3. 实现 3.1 创建DataListPager类,该类继承自DataPager类实现了为分页链接添加回 发脚本操作: public class DataListPager : DataPager { public DataListPager(PagerSettings setting, int pageIndex, int recordCount, int pageSize, DataList dal) : base(setting, pageIndex, recordCount, pageSize) { LinkButton btn = null; int _pageCount = recordCount % pageSize == 0 ? recordCount / pageSize : recordCount / pageSize + 1; int index; foreach (Control control in this.Controls) { if (control is LinkButton) { btn = (LinkButton)control; if (btn.Enabled) { string argvalue = btn.CommandArgument; bool isInt = int.TryParse(argvalue, out index); string arg = string.Empty; if (isInt) { index--; } else { switch (argvalue) { |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |