很久很久没写博客了。。。。。最近写了一个.net的分页控件,放到园子里。。。你以为好,就点个赞,很差呢,就告诉我为啥吧。。。。数据库
是使用Request.QueryString的。。。。c#
参数:数组
public int currentpageindex = 0;//当前页数 public int pagesize = 16;//每页显示的条数 public int pagecount = 0;//页数 public int rowscount = 320;//总条数 public string prevtext = "前一页"; public string nexttext = "后一页"; public string ellipsetext = "...";//分隔符 public int edgeentries = 2;//页边 public bool prevshowalways = true;//前一页按钮是否显示 public bool nextshowalways = true;//后一页按钮是否显示 public int displayentries = 6;//显示几个按钮 public string url; public string pagestr = "";
计算最大页数这里没啥好说的,从数据库读出条数以后赋给rowscount便可。ide
//计算最大的页数 public int NumPages() { return Convert.ToInt32(Math.Ceiling((decimal)rowscount / pagesize)); }
主要问题就在于计算开始和结束按钮这里,这里整好了,就至关于一半都没问题了url
一开始我是使用的以下的代码,可是有问题。。。。若是displayentries为2n-1时,最后出来的是2n。spa
//根据当前页数和显示数目计算开始和结束的分页按钮 public int[] GetInterval() { int nehalf = Convert.ToInt32(Math.Ceiling((decimal)displayentries / 2)); pagecount = NumPages(); int upperlimit = pagecount - displayentries;//最大就是upperlimit,再大的话按钮的个数就不能保证了。 int start = currentpageindex > nehalf ? Math.Max(Math.Min(currentpageindex - nehalf, upperlimit), 1) : 1; int end = currentpageindex > nehalf ? Math.Min(currentpageindex + nehalf - 1, pagecount) : Math.Min(displayentries, pagecount); return new int[] { start, end }; }
主要的缘由就在于Math.Ceiling返回的是整数,而2n-1和2n返回的是一样一个数,因此就会形成按钮个数上出现问题。.net
因此呢,我就区别了一下奇数和偶数code
//根据当前页数和显示数目计算开始和结束的分页按钮 public int[] GetInterval() { int nehalf = Convert.ToInt32(Math.Ceiling((decimal)displayentries / 2)); pagecount = NumPages(); int upperlimit = pagecount - displayentries+1; int start,end; if (displayentries % 2 == 0) { start = currentpageindex > nehalf ? Math.Max(Math.Min(currentpageindex - nehalf, upperlimit), 1) : 1; } else { start = currentpageindex > nehalf ? Math.Max(Math.Min(currentpageindex - nehalf+1, upperlimit), 1) : 1; } end = currentpageindex > nehalf ? Math.Min(currentpageindex + nehalf - 1, pagecount) : Math.Min(displayentries, pagecount); return new int[] { start, end }; }
添加按钮类blog
public string AppendItem(int pageid, string text) { string lnk; int id = pageid < 1 ? 1 : (pageid < pagecount ? pageid : pagecount); if (id == currentpageindex) { lnk = "<span class='current'>" + text + "</span>"; } else { lnk = "<a href=?" + url + "&pageid=" + id + ">" + text + "</a>"; } return lnk; }
生成分页控件类ip
public string DrawLink() { //首先获得开始和结束的数组 int[] interval = GetInterval(); //生成前一页连接 if (prevtext != "" && currentpageindex > 1 && prevshowalways) { pagestr = AppendItem(currentpageindex - 1, prevtext); } //看是否有边界页,是否须要分界符 if (interval[0] > 1 && edgeentries > 0) { //检查边界和开始谁小,画按钮 int end = Math.Min(edgeentries, interval[0]); //生成边界页 if (edgeentries == interval[0]) //注意interval[0]和edgeentries相等的时候,会出现重复 { for (int i = 1; i < end; i++) { pagestr = pagestr + AppendItem(i, i.ToString()); } } else { for (int i = 1; i <= end; i++)//从1开始,所以i要小于等于end,这样才会把end这个按钮画上 { pagestr = pagestr + AppendItem(i, i.ToString()); } } //生成分界符 if (edgeentries + 1 < interval[0] && ellipsetext != "") { pagestr = pagestr + "<span>" + ellipsetext + "</span>"; } } for (int i = interval[0]; i <= interval[1]; i++) { pagestr = pagestr + AppendItem(i, i.ToString()); } if (interval[1] < pagecount && edgeentries > 0)//结尾 { if (pagecount - edgeentries > interval[1] && ellipsetext != "") { pagestr = pagestr + "<span>" + ellipsetext + "</span>"; } int begin = Math.Max(pagecount - edgeentries + 1, interval[1]); if (pagecount - edgeentries + 1 == interval[1]) { for (int i = begin+1; i <= pagecount; i++) { pagestr = pagestr + AppendItem(i, i.ToString()); } } else { for (int i = begin; i <= pagecount; i++) { pagestr = pagestr + AppendItem(i, i.ToString()); } } } //生成后一页连接 if (nexttext != "" && currentpageindex < pagecount && nextshowalways) { pagestr = pagestr + AppendItem(currentpageindex + 1, nexttext); } return pagestr; }
这样,这个简单的.net分页控件就实现了。若是你有更好的方法,欢迎和我交流。。hiahia。。。。
MSP(Microsoft Student Partners)是微软公司针对高校
大学生在全球范围内所设立的项目。旨在鼓励那些在校园里积极倡导、推进创新实践,
乐于积极帮助他人的优秀学生,给他们提供微软最前沿的技术资源,以及更普遍的交流、展现自个人平台。
MSP项目面向全部热爱技术、敢于创新、积极推进创新实践、愿意和他人分享本身所学的在校大学生,并不单单局限于技术类背景的学生。
若是你喜欢的话,欢迎加入。地址
http://msdn.microsoft.com/zh-cn/jj889435.aspx