写自己的分页控件

来源:互联网 发布:同程网络2017校园招聘 编辑:程序博客网 时间:2024/04/29 11:49


首先我们创建一个Web用户控件



在 .ascx.cs里面写我们对页码条的控制,相当于一个类,继承与UserControl类

    public partial class PageData : System.Web.UI.UserControl    {        public string strHtml;        private int currentPage;//当前页        public int CurrentPage        {            get { return currentPage; }            set { currentPage = value; }        }        private int currentPageCount;//总页数        public int CurrentPageCount        {            get { return currentPageCount; }            set { currentPageCount = value; }        }        protected void Page_Load(object sender, EventArgs e)        {            if (CurrentPageCount <= 1)  //如果只有一页,不现实分页条            {                return;            }            int startPage = CurrentPage - 3;   //这里保持当前页在页码条中间            if (startPage <= 1)            {                startPage = 1;            }            int endPage = startPage + 6;       //这里保持当前页在页码条中间            if (endPage > CurrentPageCount)            {                endPage = CurrentPageCount;                startPage = endPage - 6;                if (startPage <= 1)                {                    startPage = 1;                }            }            StringBuilder sb = new StringBuilder();            sb.AppendFormat(" <a href=?page={0}>首页</a> ", 1);            if (currentPage > 1)            {                sb.AppendFormat(" <a href=?page={0}>上一页</a> ", CurrentPage - 1);            }            else            {                sb.AppendFormat(" <a href=javascript:void(0)>上一页</a> ");            }            for (int i = startPage; i <= endPage; i++)            {                if (i == CurrentPage)                {                    sb.Append(" " + i + " ");                }                else                {                    sb.AppendFormat(" <a href=?page={0}>[" + i + "]</a> ", i);                }            }            if (currentPage < CurrentPageCount)            {                sb.AppendFormat(" <a href=?page={0}>下一页</a> ", CurrentPage + 1);            }            else            {                sb.AppendFormat(" <a href=javascript:void(0)>下一页</a> ");            }            sb.AppendFormat(" <a href=?page={0}>末页</a> ", CurrentPageCount);            strHtml = sb.ToString();        }    }

完成之后,在.ascx里面写我们的空间容器,相当于一个html页面

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PageData.ascx.cs" Inherits="Asp.net项目.MyControl.PageData" %><div id="pageDiv"><%=strHtml %></div>

cs里面的strHtml输出到容器里,这里也可以用css来美化~

我们在web窗体里面用的时候直接像托控件一样拖过去

        <uc1:PageData runat="server" ID="PageData" />

后台代码:

    public partial class WebForm1 : System.Web.UI.Page    {        public List<Book> list;        protected void Page_Load(object sender, EventArgs e)        {            int pageIndex;            if (Request["page"] != null)            {                pageIndex = Convert.ToInt32(Request["page"]);            }            else            {                pageIndex = 1;            }            int maximumRows = 9;            OnSaleBooksBLL bll = new OnSaleBooksBLL();                        //---------------这里是我们自定义的分页控件-----------------            //可以直接点出来,初始化它的属性...            PageData.CurrentPage = pageIndex;                  PageData.CurrentPageCount = (bll.GetCount() + maximumRows - 1) / maximumRows;            //-----------------------------------            int startRowIndex = (pageIndex - 1) * maximumRows + 1;            list = bll.GetModelList_Page(startRowIndex, maximumRows);        }



最后看效果
它会保持当前页在中间显示

    末页