Asp.Net分页控件

     /// <summary>
        /// 分页方法
        /// </summary>
        /// <param name="pageIndex">当前页码</param>
        /// <param name="totalCount">总条数</param>
        /// <param name="pageSize">一页多少条</param>
        /// /// <param name="url">页面地址</param>
        /// <param name="pageLength">显示多少页码</param>
        /// <returns></returns>
        public static string Page(int pageIndex,int totalCount,int pageSize, string url,int pageLength=5)
        {
            if (totalCount<=0)
            {
                return "";
            }
            //保证在编写下一页的代码定向时不会受到中间for循环的干扰使pageIndex的值发生改变
            int redirectPageIndex = pageIndex;

            //pageSize不可为0
            if (pageSize==0)
            {
                pageSize = totalCount;
            }
            //获得当前可分页的页数数量
            int pageCount = totalCount / pageSize + (totalCount % pageSize == 0 ? 0 : 1);
            //创建用来拼接字符串的对象
            StringBuilder sb = new StringBuilder();
            //处理首页
            if (pageIndex!=1)
            {
                //当前传递进来的页码不是第1页,则显示首页和上一页
                sb.Append(string.Format("<a href={0}?pageIndex={1}&pageSize={2}>首页</a><a href={0}?pageIndex={3}&pageSize={2}>上一页</a>", url,1, pageSize,pageIndex-1));
            }

            //保存显示的页码数量
            int length;
            //处理中间的页码
            if (pageLength >= pageCount || pageLength <= 0)
            {
                //如果需要分成的页码数量比可分成的大
                length = pageCount;
            }
            else
            {
                length = pageLength;
               

            }

            //方便计算当前应该转折的pageIndex的值
            int t = pageIndex /length;
            int p = pageIndex % length;

            //这里给pageIndex重定向
            int l = pageCount - length + 1;

            //当前已经到了最后的转折点
            if (pageIndex>=l)
            {
                pageIndex = l;
            }
            else
            {
                //还未到
                if (p==0&&t==1)
                {
                    //这里说明在第一个转折点
                    pageIndex = 1;
                }
                else
                {
                    //不在第一个
                    if (p==0)
                    {
                        //这是在转折点的时候
                        pageIndex = (t - 1) * length + 1;
                    }
                    else
                    {
                        pageIndex = t * length + 1;
                    }
                    
                }
            }


            //如果当前页码为最后一页
            if (pageIndex>=pageCount)
            {
                //则让pageIndex回复到之前
                pageIndex = pageIndex - length+1; // + 1;
            }

            //处理页码
            for (int i = 0; i < length; i++)
            {
                sb.Append(string.Format("<a href={0}?pageIndex={1}&pageSize={2}>{1}</a>",url, pageIndex, pageSize));
                pageIndex++;
                //temp++;
            }

            //处理下一页与末页
            if (redirectPageIndex < pageCount)
            {
                //当前传递进来的页码不是最后页,则显示末页和下一页
                sb.Append(string.Format("<a href={0}?pageIndex={1}&pageSize={2}>下一页</a><a href={0}?pageIndex={3}&pageSize={2}>末页</a>",url, redirectPageIndex + 1, pageSize,pageCount));
            }
            sb.Append(string.Format("<span class='info'>第{0}页/共{1}页</span>", redirectPageIndex, pageCount));
          
            return sb.ToString();
        }

  

自己写的,不足不怪

调用方法:

 

前台传递

pageIndex:前台当前要显示的页码/当前被点击的页码,例如1

pageSize:前台当前要显示的数据数量,例如10

totalCount:所有数据的总条数,例如后台获取到100条

url:参数将要被传递到哪个页面/后台程序内,例如"a.aspx",则会生成<a href="a.aspx?pageIndex=1&pageSize=10">1</a>,也可不传(例如用在ajax异步无刷新分页时,但要自己手动处理分页中a标签的href属性,从中提取出pageIndex=1&pageSize=10)

pageLength:当前页中想要显示的页码数量,默认为5,例如当前数据库中的数据每次在前台展示10条,可以生成一共12个页码,传入pageLength为5后,则每次只会在页面上显示5个页码.

 

posted @ 2018-02-10 14:02  人不自在  阅读(1361)  评论(1编辑  收藏  举报