自定义分页控件

      页面中数据的分页功能常常是令程序员比较头疼的一件事情,并非是技术原因,而是分页的繁琐(包括:风格统一、参数的维护……)。ASP.NET控件中的 GridView和DataGrid等都直接支持分页,但这两中控件所擅长的是处理表格数据,而我们往往需要的显示风格要比表格丰富的多;以我往常经验, 我比较喜欢Repeater,可一随心所欲的驾驭它来完成任何复杂的显示,但可惜的是它没有提供自动的分页功能。

我们何不把这分页功能给封装起来呢?

让我们来分析一下分页的封装到底要实现那些功能:
  1. 数据显示控件不应该关心“页”的问题,因为它的功能是显示数据,你只需要把它要显示的数据给它就行了;
  2. 你必须承认分页的独立性,它与任何显示控件物理上是隔离的,所以我们在设计该控件时不应该考虑任何数据显示控件;
  3. 分页控件需要维护一个“当前页”、“页大小”的上下文;
  4. 要确定分页控件的数据无关性(这里的“数据”指的是在数据显示控件中显示的数据),数据显示控件的数据源应该由系统的“业务层”提供, 而业务层的数据提供服务所查询的具体数据有分页控件的“当前页”、“页大小”确定(如:GetData(int pageIndex,int pageSize););
  5. 分页控件必须能够维护当前页面的参数;
  6. 分页控件能够维护统一的风格(由用户指定显示样式,否则就显示默认样式)。
根据以上的分析,我们就可以来设计“分页控件”(SimplePaper)了,看看咱们的实现代码吧:

首先实现的是SimplePaper维护的数据及属性,每个属性的描述这里就不再详述了
  1    private string _class;
  2    private int _pageSize = 10;
  3    private int _numberCount = 10;
  4    private int _virtualCount = 0;
  5
  6    private string _prevText = "上一页";
  7    private string _nextText = "下一页";
  8    private string _firstText = "第一页";
  9    private string _lastText = "最末页";
 10
 11ContractedBlock.gif    /// <summary>
 12    /// 获取或设置控件关联的样式类
 13    /// </summary>

 14    [Category("Behavior")]
 15    [Description("Css的样式类名称")]
 16ContractedBlock.gif    public string Class {
 17ContractedSubBlock.gif      get {
 18        return _class;
 19      }

 20ContractedSubBlock.gif      set {
 21        _class = value;
 22      }

 23    }

 24
 25ContractedBlock.gif    /// <summary>
 26    /// 获取或设置“上一页”在分页导航条中显示的文本,默认值“上一页”
 27    /// </summary>

 28    [Category("Behavior")]
 29    [Description("上一页文本")]
 30ContractedBlock.gif    public string PrevText {
 31ContractedSubBlock.gif      get {
 32        return _prevText;
 33      }

 34ContractedSubBlock.gif      set {
 35        _prevText = value;
 36      }

 37    }

 38
 39ContractedBlock.gif    /// <summary>
 40    /// 获取或设置“下一页”在分页导航条中显示的文本,默认值“下一页”
 41    /// </summary>

 42    [Category("Behavior")]
 43    [Description("下一页文本")]
 44ContractedBlock.gif    public string NextText {
 45ContractedSubBlock.gif      get {
 46        return _nextText;
 47      }

 48ContractedSubBlock.gif      set {
 49        _nextText = value;
 50      }

 51    }

 52
 53ContractedBlock.gif    /// <summary>
 54    /// 获取或设置“第一页”在分页导航条中显示的文本,默认值“第一页”
 55    /// </summary>

 56    [Category("Behavior")]
 57    [Description("第一页文本")]
 58ContractedBlock.gif    public string FirstText {
 59ContractedSubBlock.gif      get {
 60        return _firstText;
 61      }

 62ContractedSubBlock.gif      set {
 63        _firstText = value;
 64      }

 65    }

 66
 67ContractedBlock.gif    /// <summary>
 68    /// 获取或设置“最末页”在分页导航条中显示的文本,默认值“最末页”
 69    /// </summary>

 70    [Category("Behavior")]
 71    [Description("最末页文本")]
 72ContractedBlock.gif    public string LastText {
 73ContractedSubBlock.gif      get {
 74        return _lastText;
 75      }

 76ContractedSubBlock.gif      set {
 77        _lastText = value;
 78      }

 79    }

 80    
 81ContractedBlock.gif    /// <summary>
 82    /// 获取或设置分页的大小,默认值10
 83    /// </summary>

 84    [Category("Behavior")]
 85    [Description("页大小")]
 86ContractedBlock.gif    public int PageSize {
 87ContractedSubBlock.gif      get {
 88        return _pageSize;
 89      }

 90ContractedSubBlock.gif      set {
 91        _pageSize = value;
 92      }

 93    }

 94
 95ContractedBlock.gif    /// <summary>
 96    /// 获取或设置分页导航条中显示的页码数量,默认10
 97    /// </summary>

 98    [Category("Behavior")]
 99    [Description("分页中要显示的页码数量")]
100ContractedBlock.gif    public int NumberCount {
101ContractedSubBlock.gif      get {
102        return _numberCount;
103      }

104ContractedSubBlock.gif      set {
105        _numberCount = value;

转载于:https://www.cnblogs.com/cwy173/archive/2009/11/13/1602767.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值