/// <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页时
效果图: