简单实现一个.net分页控件2013-11-11最近写了一个.net的分页控件,放到园子里。。。你觉得好,就点个赞,不好呢,就告诉我为啥吧。。。。是使用Request.QueryString的。。。。参数:
public int currentPageIndex = 0;//当前页数public int pagesize = 16;//每页显示的条数public int pagecount = 0;//页数public int rowscount = 0;//总条数public string prevtext = "前一页";public string nexttext = "后一页";public string ellipsetext = "...";//分隔符public int edgeentries = 2;//页边public bool prevshowalways = true;//前一页按钮是否显示public bool nextshowalways = true;//后一页按钮是否显示public int displayentries = 5;//显示几个按钮public string url;public string pagestr = "";
用到的类计算最大页数这里没啥好说的,从数据库读出条数之后赋给rowscount即可。
//计算最大的页数public int NumPages(){return Convert.ToInt32(Math.Ceiling((decimal)rowscount / pagesize));}
主要问题就在于计算开始和结束按钮这里,这里整好了,就相当于一半都没问题了一开始我是使用的如下的代码,但是有问题。。。。如果displayentries为2n-1时,最后出来的是2n。
//根据当前页数和显示数目计算开始和结束的分页按钮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返回的是同样一个数,所以就会造成按钮个数上出现问题。所以呢,我就区别了一下奇数和偶数
//根据当前页数和显示数目计算开始和结束的分页按钮public int[] GetInterval(){int nehalf = Convert.ToInt32(Math.Ceiling((decimal)displayentries / 2));pagecount = NumPages();int upperlimit = pagecount - displayentries;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 };}
添加按钮类
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;}