ASP.NET自定义控件 第九天 自定义GridView


 1. 引言
  ASP.NET 2.0里为我们提供了全新的GridView控件,它在DataGrid基础之上增加了许多新的特性,例如不编写一行代码就可以和数据源控件结合起来实现数据的展示并且分页,但是这种分页效率较低,这是从数据库一次读取所有的数据再进行分页,如果数据量较少则可以实现快速开发,但是假如数据库中存放大量数据,这种操作性能显得就比较低了,所以我们一般自己编写数据读取方法,在PageIndexChanging事件中绑定新页,这时会遇到一个问题,如果我们仅读取一页数据时GridView不能正确计算出共有多少页,也就无法正确呈现出分页按钮,因此需要考虑对其进行扩展。另外DataList控件提供了灵活的模版设置以显示记录内容,但是它有一个最大的弱点就是不支持分页,我们同样试图扩展DataList以增加分页的特性。

  2. 分析

  之所以要将GridView和DataList放在一起考虑,是因为不论哪一个数据绑定控件生成分页链接列表时需要执行相似的操作。GridView控件本身支持分页,所以在开发自定义表格控件时,只需要加入相应的按钮服器端控件,将CommandName属性设置为Page,并设置CommandArgument属性为特定值,即可由GridView捕捉到页面更改事件,为了避免在代码中出现“魔法字符”,定义了常量类保存使用的字符串常量。但是这种方法对于DataList却不适用,因为DataList不能接收到客户端的回发事件,这也是DataList类和GridView类的一个区别—DataList类没有实现IPostBackEventHandler接口。为了能够使DataList接收客户端回发并触发分页事件,需要使自定义DataList实现IPostBackEventHandler接口,并使用自定义事件参数类在触发事件时传递页码信息。

  现在自定义GridView和DataList控件均可以实现分页了,为了使两者有一个统一的分页外观,定义分页基类实现分页功能,并且针对DataList分页,继承分页基类并设置分页按钮的回发脚本。最后为了能够把分页按钮作为一个整体添加到表格中,使之继承自TableCell(表格中的单元格)。

  3. 实现

  3.1 创建保存命令字符串的常量类Constant

public class Constant
{
  public const string FIRST_PAGE = "First";
  public const string PREV_PAGE = "Prev";
  public const string NEXT_PAGE = "Next";
  public const string LAST_PAGE = "Last";
  public const string PAGE_ARGUMENT = "Page";
  public const char ARGUMENT_SPLITTER = '


« 
» 

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3