好久好久沒寫博客了。。。。。最近寫了一個.net的分頁控件,放到園子里。。。你覺得好,就點個贊,不好呢,就告訴我為啥吧。。。。
成都創(chuàng)新互聯(lián)公司歡迎聯(lián)系:13518219792,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁制作領(lǐng)域十多年,包括成都iso認(rèn)證等多個領(lǐng)域擁有多年的網(wǎng)站制作經(jīng)驗,選擇成都創(chuàng)新互聯(lián)公司,為企業(yè)錦上添花。
是使用Request.QueryString的。。。。
參數(shù):
public int currentpageindex = 0;//當(dāng)前頁數(shù) public int pagesize = 16;//每頁顯示的條數(shù) public int pagecount = 0;//頁數(shù) public int rowscount = 320;//總條數(shù) 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 = "";
計算最大頁數(shù)這里沒啥好說的,從數(shù)據(jù)庫讀出條數(shù)之后賦給rowscount即可。
//計算最大的頁數(shù) public int NumPages() { return Convert.ToInt32(Math.Ceiling((decimal)rowscount / pagesize)); }
主要問題就在于計算開始和結(jié)束按鈕這里,這里整好了,就相當(dāng)于一半都沒問題了
一開始我是使用的如下的代碼,但是有問題。。。。如果displayentries為2n-1時,最后出來的是2n。
//根據(jù)當(dāng)前頁數(shù)和顯示數(shù)目計算開始和結(jié)束的分頁按鈕 public int[] GetInterval() { int nehalf = Convert.ToInt32(Math.Ceiling((decimal)displayentries / 2)); pagecount = NumPages(); int upperlimit = pagecount - displayentries;//最大就是upperlimit,再大的話按鈕的個數(shù)就不能保證了。 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返回的是整數(shù),而2n-1和2n返回的是同樣一個數(shù),所以就會造成按鈕個數(shù)上出現(xiàn)問題。
所以呢,我就區(qū)別了一下奇數(shù)和偶數(shù)
//根據(jù)當(dāng)前頁數(shù)和顯示數(shù)目計算開始和結(jié)束的分頁按鈕 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 }; }
添加按鈕類
public string AppendItem(int pageid, string text) { string lnk; int id = pageid < 1 ? 1 : (pageid < pagecount ? pageid : pagecount); if (id == currentpageindex) { lnk = "" + text + ""; } else { lnk = "" + text + ""; } return lnk; }
生成分頁控件類
public string DrawLink() { //首先得到開始和結(jié)束的數(shù)組 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相等的時候,會出現(xiàn)重復(fù) { 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 + "" + ellipsetext + ""; } } for (int i = interval[0]; i <= interval[1]; i++) { pagestr = pagestr + AppendItem(i, i.ToString()); } if (interval[1] < pagecount && edgeentries > 0)//結(jié)尾 { if (pagecount - edgeentries > interval[1] && ellipsetext != "") { pagestr = pagestr + "" + ellipsetext + ""; } 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分頁控件就實現(xiàn)了。如果你有更好的方法,歡迎和我交流。。hiahia。。。。
MSP(Microsoft Student Partners)是微軟公司針對高校
大學(xué)生在全球范圍內(nèi)所設(shè)立的項目。旨在鼓勵那些在校園里積極倡導(dǎo)、推動創(chuàng)新實踐,
樂于積極幫助他人的優(yōu)秀學(xué)生,給他們提供微軟最前沿的技術(shù)資源,以及更廣泛的交流、展示自我的平臺。
MSP項目面向所有熱愛技術(shù)、勇于創(chuàng)新、積極推動創(chuàng)新實踐、愿意和他人分享自己所學(xué)的在校大學(xué)生,并不僅僅局限于技術(shù)類背景的學(xué)生。
如果你喜歡的話,歡迎加入。地址
http://msdn.microsoft.com/zh-cn/jj889435.aspx