Asp.net里头,像DataList,Repeater,DataGrid,GridView,FormView包括Asp.net3.5中的ListView这几种服务器数据绑定控件,是在开发中经常需要用到的,撇开Asp.net3.5(因为3.5的版本有带分页的控件),DataGrid是1.1版本中很强大的控件,GridView则是2.0中有的,其实就是DataGrid的升级版,他们自身都带有分页功能,只需设置下属性,而DataList和Repeater则没有,下面就以DataList为例实现自定义分页.
      首先,先来看一个类:PagedDataSource其成员如下:

名称 说明
AllowCustomPaging 获取或设置一个值,指示是否在数据绑定控件中启用自定义分页。
AllowPaging 获取或设置一个值,指示是否在数据绑定控件中启用分页。
AllowServerPaging 获取或设置一个值,指示是否启用服务器端分页。
Count 获取要从数据源使用的项数。
CurrentPageIndex 获取或设置当前页的索引。
DataSource 获取或设置数据源。
DataSourceCount 获取数据源中的项数。
FirstIndexInPage 获取页面中显示的首条记录的索引。
IsCustomPagingEnabled 获取一个值,该值指示是否启用自定义分页。
IsFirstPage 获取一个值,该值指示当前页是否是首页。
IsLastPage 获取一个值,该值指示当前页是否是最后一页。
IsPagingEnabled 获取一个值,该值指示是否启用分页。
IsReadOnly 获取一个值,该值指示数据源是否是只读的。
IsServerPagingEnabled 获取一个值,指示是否启用服务器端分页支持。
IsSynchronized 获取一个值,该值指示是否同步对数据源的访问(线程安全)。
PageCount 获取显示数据源中的所有项所需要的总页数。
PageSize 获取或设置要在单页上显示的项数。
SyncRoot 获取可用于同步集合访问的对象。
VirtualCount 获取或设置在使用自定义分页时数据源中的实际项数。

有发现什么没?可以看到这些属性在GridView等有内置分页的控件中是类似的,所以这些有内置分页的控件也是通过该类实现分页的,那下来就好办了
前台Html代码:

共:<asp:Label  id="lblPageTotal" runat="server"></asp:Label>页   
<asp:LinkButton id="lbFirst" onclick="PagerButton_Click" runat="server" CommandArgument="first">首 页</asp:LinkButton> 
<asp:LinkButton  id="lbPrev" onclick="PagerButton_Click" runat="server" CommandArgument="prev">上一页</asp:LinkButton> 
<asp:LinkButton  id="lbNext" onclick="PagerButton_Click" runat="server" CommandArgument="next">下一页</asp:LinkButton> 
<asp:LinkButton id="lbLast" onclick="PagerButton_Click" runat="server" CommandArgument="last">尾 页</asp:LinkButton>   
当前:第<asp:Label  id="lblCurrentPage" runat="server"></asp:Label>页   
跳转至:第<asp:DropDownList ID="ddlPage" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlPage_SelectedIndexChanged"></asp:DropDownList>页

后台.cs代码:

Code
protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
   {
      ViewState["PageIndex"] = "0"; //第一次生成,页码索引置0
      this.BindGrid();

ddlPage.Items.Clear();
      for (int i = 0; i < Int32.Parse(lblPageTotal.Text); i++)
      {
         string itemText = (i + 1).ToString();
         ddlPage.Items.Add(new ListItem(itemText, itemText));
      }
   }
}

绑定数据源的方法

Code
private void BindGrid()
{
    DataTable table = this.CreateTable();  //CreateTable这个方法就是获取数据源的了,这里不贴了
    if (table.Rows.Count > 0)
    {
        //对PagedDataSource 对象的相关属性赋值
         objPDS = new PagedDataSource();
        objPDS.DataSource = table.DefaultView;
        objPDS.AllowPaging = true;
        objPDS.PageSize = this.ListSize;  //ListSize属性用于设置每页显示多少条,可以直接指定
        objPDS.CurrentPageIndex = int.Parse(ViewState["PageIndex"].ToString());

lbFirst.Enabled = true;
        lbPrev.Enabled = true;
        lbNext.Enabled = true;
        lbLast.Enabled = true;
        //判断当前页是否首页
         if (objPDS.IsFirstPage)
        {
            lbFirst.Enabled = false;
            lbPrev.Enabled = false;
        }
        //判断当前页是否尾页
         if (objPDS.IsLastPage)
        {
            lbNext.Enabled = false;
            lbLast.Enabled = false;
        }
        this.dl_LinkList.DataSource = objPDS;
        this.dl_LinkList.DataBind();

lblPageTotal.Text = objPDS.PageCount.ToString();
        lblCurrentPage.Text = (objPDS.CurrentPageIndex + 1).ToString();
     }
     else
     {
        this.dl_LinkList.DataSource = table;
        this.dl_LinkList.DataBind();
     }
}

触发分页按钮的事件

Code
protected void PagerButton_Click(object sender, EventArgs e)
{
   string arg = ((LinkButton)sender).CommandArgument.ToString().ToLower();
   int pageIndex = int.Parse(ViewState["PageIndex"].ToString());
   switch (arg)
   {
       case "first":
            pageIndex = 0;
            break;
       case "last":
            int itemCount = this.GetDataSource().Rows.Count;
            int totalPage = itemCount % this.ListSize == 0 ? itemCount / ListSize : itemCount / (ListSize + 1);
            pageIndex = totalPage - 1;
            break;
       case "prev":
            pageIndex = pageIndex - 1;
            break;
       case "next":
            pageIndex = pageIndex + 1;
            break;
    }
    ViewState["PageIndex"] = pageIndex;
    this.BindGrid();
    ddlPage.SelectedIndex = pageIndex;
}

触发下拉框的事件

Code
protected void ddlPage_SelectedIndexChanged(object sender, EventArgs e)
{
   ViewState["PageIndex"] = Int32.Parse(ddlPage.SelectedValue)-1;
   this.BindGrid();
   ddlPage.SelectedIndex = Int32.Parse(ViewState["PageIndex"].ToString());
}

代码很简单,就不解释了...要注意的是,下拉框要在页面载入的时候初始化,不然触发不到下拉框的事件.

转载于:https://www.cnblogs.com/py891021/archive/2009/08/19/1549559.html

DataList自定义分页相关推荐

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

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

  2. GridView自定义分页导航

    自己做的一个项目中所运用到的技术:| 1.         日历控件(带时分秒) 2.         GridView 批量删除,自定义分页,定位页码 3.         GridView 修改 ...

  3. Asp.net中DataGrid控件的自定义分页

    使用实现起来虽然比较方便,但是效率不高,每次都需要读取所有页(整个记录集),而加载的只是其中一页,造成了资源的浪费,记录多又会使效率变得很低.下面通过DataGrid的自定义分页功能来减少资源使用和提 ...

  4. ASP.NET 2.0在SQL Server 2005上自定义分页

    这篇文章讲述了如何利用SQL Server 2005的新特性来简单高效的实现分页.对于那些暂时还没用到SQL Server2005的人们,请看在大规模数据中的高效分页方法.如果需要,这篇文章会补上这里 ...

  5. GridView自定义分页样式(上一页,下一页,到第几页)(新手教程)

    今天要为网站做一个文章列表,发现GridView的分页样式很难看,于是结合网上的例子,自己做了一个.不是很美观,不过还是很实用的,先看下效果吧,如图(1).演示地址http://www.veryam. ...

  6. 自定义分页(模块化)

    自定义分页 1.目的&环境准备 目的把分页写成一个模块的方式然后在需要分页的地方直接调用模块就行了. 环境准备Django中生成一个APP并且注册,配置URL&Views 配置URL ...

  7. Laravel自定义分页样式

    Laravel 的分页组件默认为 Bootstrap 的分页样式,但如果我们用的并不是 Bootstrap 或者说分页的 HTML结构不一样,这时我们需要自定义分页.其实 Laravel 的分页组件是 ...

  8. Django框架详细介绍---cookie、session、自定义分页

    1.cookie 在HTTP协议介绍中提到,该协议是无状态的,也就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的 ...

  9. Sql Server 2005自定义分页

    前面一篇随笔,我提到了Sql Server 2000的自定义分页,但是在sql server 2000中,要实现显示某一页,就返回那一页数据的效果的方法实在不尽人意.网上很多通用的分页存储过程,但看着 ...

最新文章

  1. lr如何监控linux,LoadRunner如何监控Linux系统资源
  2. 第十一届山东省大学生程序设计竞赛 L. Construction of 5G Base Stations(概率期望,递推前缀和优化)
  3. 多级菜单系统安装维护shell脚本实现企业级案例
  4. 宣告放弃社交后,支付宝把希望放在了“信息流”上
  5. 十分钟成为 TiDB Contributor,还送限量版马克杯
  6. mysql 按照in id顺序_Mysql查询结果顺序按in()中ID的顺序排列的案例区分
  7. python多线程返回值_python获取多线程及子线程的返回值
  8. php大数组查找算法,PHP简单的数组查找算法分享
  9. linux査 到漠河 装apache,如何在Ubuntu上搭建一台安全的Apache Web服务器
  10. Tensorflow之RNN,LSTM
  11. html中设置负边距的意义,css负边距之详解
  12. linux 运行scrapy,python 文件 运行 scrapy
  13. linux 自动安装系统,cobbler 自动安装linux系统
  14. 从第一范式(2nf)到第二范式(3nf)_啥是数据库范式
  15. AITO问界 M5正式交付:搭载华为鸿蒙系统 24.98万元起
  16. 华为计算机充电指示灯,数码产品:华为p40充电指示灯不亮在哪里设置 有指示灯吗...
  17. HTML 遮罩显示工具栏
  18. mysql客户端navicat怎么连接_Navicat使用详解(mysql客户端工具)
  19. wireshark执行XDG问题
  20. java encode_java的web开发中URLEncoder.encode方法

热门文章

  1. JavaEE高级-MyBatis学习笔记
  2. freebsd 域名服务器
  3. ubuntu中切换到root账号方法
  4. apache 服务发布多个项目,只需要更改配置文件(需要设定虚拟主机)
  5. setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto
  6. 简单的问题和复杂的问题
  7. 使用rem适配不同屏幕的移动设备
  8. 【LeetCode】无重复字符的最长子串【滑动窗口法】
  9. 2019 GDUT Rating Contest II : Problem G. Snow Boots
  10. JavaScript使用localStorage缓存Js和css文件