• 自定义分页控件


          页面中数据的分页功能常常是令程序员比较头疼的一件事情,并非是技术原因,而是分页的繁琐(包括:风格统一、参数的维护……)。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
     11    /// <summary>
     12    /// 获取或设置控件关联的样式类
     13    /// </summary>

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

     20      set {
     21        _class = value;
     22      }

     23    }

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

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

     34      set {
     35        _prevText = value;
     36      }

     37    }

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

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

     48      set {
     49        _nextText = value;
     50      }

     51    }

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

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

     62      set {
     63        _firstText = value;
     64      }

     65    }

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

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

     76      set {
     77        _lastText = value;
     78      }

     79    }

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

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

     90      set {
     91        _pageSize = value;
     92      }

     93    }

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

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

    104      set {
    105        _numberCount = value;
  • 相关阅读:
    Heartbeat
    HA集群基本概念详解
    crmsh语法
    corosync.conf
    安装cloudbase-init和qga批处理
    Oz代码梳理
    [转]LVS安装使用详解
    [转]LVS+Keepalived负载均衡配置
    Django REST framework之序列化组件以及源码分析+全局、局部Hook
    Django REST framework之解析器实例以及源码流程分析
  • 原文地址:https://www.cnblogs.com/cwy173/p/1602767.html
Copyright © 2020-2023  润新知