using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.Diagnostics; namespace Ant.Service.Common { /// /// 分页组件调用实例 /// var pager = new Common.RupengPager(); /// pager.UrlFormat = "测试分页.aspx?pagenum={n}";//设置分页URL /// pager.PageSize = 10; //设置每页显示个数 /// pager.TryParseCurrentPageIndex(Request["pagenum"]);//获取当前页数 /// int startRowIndex = (pager.CurrentPageIndex - 1) * pager.PageSize;//开始行号计算 /// So_KeywordLogBLL bll = new So_KeywordLogBLL();//获取分页数据 /// pager.TotalCount = bll.GetTotalCount();//计算总个数 /// Repeater1.DataSource = bll.GetPagedData(startRowIndex, startRowIndex + pager.PageSize - 1); //设置数据绑定 /// Repeater1.DataBind(); /// PagerHTML = pager.Render();//渲染页码条HTML /// public class RupengPager { /// /// 总数据条数 /// public int TotalCount { get; set; } /// /// 每页数据条数 /// public int PageSize { get; set; } /// /// 当前页码(从1开始) /// public int CurrentPageIndex { get; set; } /// /// 显示出来最多的页码数量,因为假设有100页,不可能把100页都显示到界面上 /// public int MaxPagerCount { get; set; } /// /// 页码链接的地址格式,页码用{n}占位。 /// public string UrlFormat { get; set; } /// /// 默认初始化 /// public RupengPager() { PageSize = 10; MaxPagerCount = 10; } /// /// 尝试从字符串pn中解析当前页面赋值给CurrentPageIndex /// /// public void TryParseCurrentPageIndex(string pn) { int temp; if (int.TryParse(pn, out temp)) { CurrentPageIndex = temp; } else { CurrentPageIndex = 1; } } /// /// 创建页码链接 /// /// 页码 /// 链接文本 /// private string GetPageLink(int i,string text) { StringBuilder sb = new StringBuilder(); string url = UrlFormat.Replace("{n}", i.ToString()); sb.Append("").Append(text).Append(""); return sb.ToString(); } public string Render() { StringBuilder sb = new StringBuilder(); //TotalCount=35,PageSize=10,pageCount=4 //计算总页数,如果是30条,则是3页,31条也是3页,29条也是3页,因此是 //天花板运算Ceiling double tempCount = TotalCount / PageSize; int pageCount = (int)Math.Ceiling(tempCount); //计算显示的页码数(当总页码大于MaxPagerCount)的起始页码 int visibleStart = CurrentPageIndex-MaxPagerCount/2; if (visibleStart <1) { visibleStart = 1; } //计算显示的页码数(当总页码大于MaxPagerCount)的起始页码 int visibleEnd = visibleStart + MaxPagerCount; //显示最多MaxPagerCount条 //如果算出来的结束页码大于总页码的话则调整为最大页码 if (visibleEnd >pageCount) { visibleEnd = pageCount; } if (CurrentPageIndex > 1) { sb.Append(GetPageLink(1, "首页")); sb.Append(GetPageLink(CurrentPageIndex - 1, "上一页")); } else { sb.Append("首页"); //如果没有上一页了,则只显示一个上一页的文字,没有超链接 sb.Append("上一页"); } //绘制可视的页码链接 for (int i = visibleStart; i <= visibleEnd; i++) { //当前页不是超链接 if (i == CurrentPageIndex) { sb.Append("").Append(i).Append(""); } else { sb.Append(GetPageLink(i,i.ToString())); } } if (CurrentPageIndex < pageCount) { sb.Append(GetPageLink(CurrentPageIndex + 1, "下一页")); sb.Append(GetPageLink(pageCount + 1, "末页")); } else { sb.Append("下一页"); sb.Append("末页"); } return sb.ToString(); } } }