/// <summary> /// 計算按當前頁碼及最大生成頁條數在總頁數時生成的兩個下標值 /// 例如pageIndex=4,當前資料一共有7頁(pageLength) /// 而需要生成5頁(pageCount),那麼最終會生成兩個值2和6 /// 前端在使用時只用以2開始以6結尾生成對應的頁碼標籤即可 /// </summary> /// <param name="pageIndex">當前頁碼</param> /// <param name="pageLength">所有頁碼數量</param> /// <param name="pageCount">要生成的頁碼數量</param> /// <returns>第一頁的頁碼,最後一頁的頁碼</returns> private Tuple<int, int> GetPages(int pageIndex, int pageLength, int pageCount = 5) { if (pageIndex > pageLength) { pageIndex = pageLength; } if (pageIndex < 1) { pageIndex = 1; } if (pageLength <= pageCount) { return new Tuple<int, int>(1, pageLength); } else { int left = 1; int count = pageCount; if (pageIndex - 2 <= 1) { return new Tuple<int, int>(left, count); } else { //left count均要計算 if (pageIndex + 2 <= pageLength) { //左右都充足 left = pageIndex - 2; count = pageIndex + 2; return new Tuple<int, int>(left, count); } else { //左充右缺 count = pageLength; left = pageLength - 4; return new Tuple<int, int>(left, count); } } } }
這個方法的使用先決條件是要先計算出當前查詢的資料一共能分多少數量的頁碼出來
這個也很好計算: pageLength = (int)Math.Ceiling(dataCount/ pageSize*1.0); // 資料量/每頁條數 取最大值
每頁2條數量,最多顯示5個頁碼
當總頁碼數量不足以分5頁時
效果圖: