掌握要点: <IList>,DataGrid翻页事件...
详细代码如下,慢慢体会..

using System;
using System.Collections;
using System.Collections.Specialized;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomControl
{
    /**//// <summary>
    /// CustomList 的摘要说明
    /// 重构DataList控件
    /// </summary>
    public class CustomList : DataList
    {
        //静态常量
        protected const string HTML1 = "<table width=100% cellpadding=0 cellspacing=0><tbody><tr><td>";
        protected const string HTML2 = "</td></tr><tr><td align=right>";
        //protected const string HTML3 = "</td><td align=center class=paging>";

        //protected const string HTML5 = "</td><td align=right class=paging>";

        protected const string HTML4 = "</td></tr></tbody></table>";

        private static readonly Regex RX = new Regex(@"^&page=\d+", RegexOptions.Compiled);
        private const string LINK_PREV = "<a href=?page={0}>前一页</a>";
        private const string LINK_MORE = "<a href=?page={0}>下一页</a>";
        private const string LINK_FIRST = "<a href=?page={0}>首页</a>";     //首页
        private const string LINK_LAST = "<a href=?page={0}>尾页</a>";      //尾页
        private const string KEY_PAGE = "page";
        private const string COMMA = "?";
        private const string AMP = "&";

        protected string emptyText;
        private IList dataSource;       //数据源
        private int pageSize = 10;      //每页大小
        private int currentPageIndex;   //当前页
        private int itemCount;          //数据条目总数

        /**//// <summary>
        /// 指定要绑定的数据源
        /// </summary>
        override public object DataSource
        {
            set
            {
                //This try catch block is to avoid issues with the VS.NET designer
                //The designer will try and bind a datasource which does not derive from ILIST
                try
                {
                    dataSource = (IList)value;
                    ItemCount = dataSource.Count;
                }
                catch
                {
                    dataSource = null;
                    ItemCount = 0;
                }
            }
        }

        /**//// <summary>
        /// 每页大小
        /// </summary>
        public int PageSize
        {
            get { return pageSize; }
            set { pageSize = value; }
        }

        /**//// <summary>
        /// 总页数
        /// </summary>
        protected int PageCount
        {
            get { return (ItemCount - 1) / pageSize; }
        }

        /**//// <summary>
        /// 可重载,数据条目总数
        /// </summary>
        virtual protected int ItemCount
        {
            get { return itemCount; }
            set { itemCount = value; }
        }

        /**//// <summary>
        /// 可重载,当前页码
        /// </summary>
        virtual public int CurrentPageIndex
        {
            get { return currentPageIndex; }
            set { currentPageIndex = value; }
        }

        /**//// <summary>
        /// 空Text
        /// </summary>
        public string EmptyText
        {
            set { emptyText = value; }
        }

        /**//// <summary>
        /// 设置页面,翻页事件
        /// </summary>
        /// <param name="index"></param>
        public void SetPage(int index)
        {
            OnPageIndexChanged(new DataGridPageChangedEventArgs(null, index));
        }

        override protected void OnLoad(EventArgs e)
        {
            if (Visible)
            {
                string page = Context.Request[KEY_PAGE];
                int index = (page != null) ? int.Parse(page) : 0;
                SetPage(index);
            }
        }


        /**//// <summary>
        /// Overriden method to control how the page is rendered
        /// Render提交写入
        /// </summary>
        /// <param name="writer"></param>
        override protected void Render(HtmlTextWriter writer)
        {

            //Check there is some data attached
            if (ItemCount == 0)
            {
                writer.Write(emptyText);
                return;
            }

            //Mask the query "?"/"&"二个符号
            string query = Context.Request.Url.Query.Replace(COMMA, AMP);
            //正则表达式替换
            query = RX.Replace(query, string.Empty);


            // Write out the first part of the control, the table header
            writer.Write(HTML1);

            // Call the inherited method
            base.Render(writer);

            // Write out a table row closure
            writer.Write(HTML2);

            if (currentPageIndex > 0)
            writer.Write(string.Format(LINK_FIRST, 0 + query) + "&nbsp;");     //首页
            //Determin whether next and previous buttons are required
            //Previous button?
            if (currentPageIndex > 0)
                writer.Write(string.Format(LINK_PREV, (currentPageIndex - 1) + query));

            //Close the table data tag
            //writer.Write(HTML3);

            //当前页/总页数
            writer.Write("&nbsp;&nbsp;" + string.Format("页码:{0}/{1}", currentPageIndex + 1, PageCount + 1) + "&nbsp;&nbsp;");

            //writer.Write(HTML5);

            //Next button?
            if (currentPageIndex < PageCount)
                writer.Write(string.Format(LINK_MORE, (currentPageIndex + 1) + query));
            if (currentPageIndex < PageCount)
            writer.Write("&nbsp;" + string.Format(LINK_LAST, PageCount + query));      //尾页

            //Close the table
            writer.Write(HTML4);
        }

        override protected void OnDataBinding(EventArgs e)
        {

            //Work out which items we want to render to the page
            int start = CurrentPageIndex * pageSize;
            int size = Math.Min(pageSize, ItemCount - start);

            IList page = new ArrayList();

            //Add the relevant items from the datasource
            for (int i = 0; i < size; i++)
                page.Add(dataSource[start + i]);

            //set the base objects datasource
            base.DataSource = page;
            base.OnDataBinding(e);

        }

        /**//// <summary>
        /// 翻页事件
        /// </summary>
        public event DataGridPageChangedEventHandler PageIndexChanged;

        /**//// <summary>
        /// 可重载,翻页事件处理
        /// </summary>
        /// <param name="e"></param>
        virtual protected void OnPageIndexChanged(DataGridPageChangedEventArgs e)
        {
            if (PageIndexChanged != null)
                PageIndexChanged(this, e);
        }
    }
}

转载于:https://www.cnblogs.com/sjett/archive/2006/06/20/430834.html

petshop4学习_重构DataList实现分页相关推荐

  1. mysql分页是物理分页_学习MySQL:什么是分页

    mysql分页是物理分页 In this article, I am going to explain that in MySQL, what is pagination and how we can ...

  2. 使用PagedDataSource给Repeater、DataList增加分页

    Repeater和DataList是数据库中常用的数据显示控件,它们和DataGrid相比较因为没有分页等复杂的功能,因此性能高,同时Repeater自定义模板又给我们带来了很大的灵活性.但是Repe ...

  3. 立可得_第2章_新零售_重构人、货、场

    立可得_第2章_新零售_重构人.货.场 文章目录 立可得_第2章_新零售_重构人.货.场 1.智能售货机需求分析 1.1 概念介绍 1.1.1 新零售 1.1.2 O2O 1.1.3 物联网 1.2 ...

  4. 分页技巧_实现第一个分页功能(回复列表中的分页)

    分页技巧_实现第一个分页功能(回复列表中的分页) ======================================== 假设共25条数据,每页显示10条,则共3页 first  max - ...

  5. python ui bs_Guibs的Python学习_列表

    Guibs 的 Python学习_列表# 列表# 列表由一系列按特定顺序排列的元素组成, 其中元素和元素之间可以没有任何关系 # 在 Python 中, 用方括号 [] 来表示列表, 并用逗号 , 分 ...

  6. python学习_循环语句

    python学习_循环语句 第1关:斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列. 因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子 ...

  7. 如何学习页面重构/对页面重构理解

    笔者是前端小白一枚,在往前端页面重构方向学习成长中,今天花了一天时间学习相关的文章 在这里集合一些关于重构基础概念和成长建议,希望能对想了解和学习页面重构的同学有所帮助 文章中提到的相关文章均说明链接 ...

  8. linux系统编程学习_(2)进程控制-- fork函数、exec函数族、回收子进程--孤儿进程僵尸进程、wait函数

    linux系统编程学习_(2)进程控制-- fork函数.exec函数族.回收子进程–孤儿进程僵尸进程.wait函数 进程控制 fork()函数 创建一个子进程. pid_t fork(void); ...

  9. 交通流分析2:《基于公共交通大数据的上海市居民出行时空特征研究_王宇》和《面向交通拥堵预测大数据的神经网络群组快速学习_沈晴》阅读总结

    上一篇的地址:https://blog.csdn.net/qq_43012160/article/details/103313749 基于公共交通大数据的上海市居民出行时空特征研究_王宇 这篇论文内容 ...

最新文章

  1. input placeholder样式
  2. opengl加载显示3DS模型3DS类型文件
  3. boost::hana::reverse用法的测试程序
  4. Docker常用操作命令(一)
  5. C# Regex类详解
  6. java system.setproperties_在JAVA中 System.getProperty 和 System.setProperty 方法.
  7. rhel6.3-64 yum问题
  8. JAVA生成32位随机字符串工具
  9. Android 权限清单大全
  10. 解析AI漫画系统CariGAN:这效果让漫画师颤抖!
  11. Veket Win7PE Win10PE多启动维护优盘制作
  12. 从Facebook上市看“社交网站效应”
  13. 谷歌浏览器屏蔽百度热点搜索
  14. 切片器可以设置日期格式?_切片器——一个筛选神器
  15. DSPE-PEG-LTLRWVGLMS(二硬脂酰基磷脂酰乙醇胺-聚乙二醇-肿瘤靶向蛋白);神经胶质瘤归巢肽
  16. 信息抽取之实体消歧,统一
  17. 雷军微博拧螺丝,CFO为粉丝数发愁
  18. 4.3 将千克转换成磅
  19. 杰理AC632蓝牙芯片ADC
  20. Android上的RNDIS

热门文章

  1. fwrite函数的一般调用形式是什么?
  2. Windows 动态链接库 DLL 浅析
  3. 群晖 上传 源文件不存在_群晖NAS连接百度网盘报错?原因是这样的
  4. slf4j注解log报错_SpringBoot自定义日志注解,用于数据库记录操作日志,你用过吗?...
  5. jsp文件能转换html吗,html怎么转换成jsp
  6. Pcm设备2M通道,E1的基础知识介绍
  7. 【渝粤教育】广东开放大学 数据采集技术 形成性考核 (29)
  8. python将html存为pdf_用Python将HTML转为PDF。
  9. oracle查询字段有list,java读取oracle表字段信息存到列表(LIST)中
  10. (2.2)HarmonyOS鸿蒙页面跳转