Last active
April 5, 2016 03:59
-
-
Save ss22219/6873526 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
/// <summary> | |
/// 分页类 | |
/// </summary> | |
/// <typeparam name="T">实体类型</typeparam> | |
public class Page<T> : IEnumerable<T> | |
{ | |
/// <summary> | |
/// 创建一个分页类 | |
/// </summary> | |
/// <param name="list">当前页列表</param> | |
/// <param name="totalCount">分页总个数</param> | |
/// <param name="pageIndex">当前页数</param> | |
public Page(List<T> list, int pageIndex, int pageSize, int totalCount, int pageLabelCount) | |
{ | |
PageIndex = pageIndex; | |
TotalCount = totalCount; | |
List = list; | |
PageLabelCount = pageLabelCount; | |
PageSize = pageSize; | |
} | |
private int pageSize; | |
/// <summary> | |
/// 每页显示数量 | |
/// </summary> | |
public int PageSize { get { return pageSize; } set { if (value > 0) pageSize = value; else pageSize = 1; } } | |
public int PrePage | |
{ | |
get | |
{ | |
return pageIndex > 1 ? pageIndex - 1 : 1; | |
} | |
} | |
public int NextPage { | |
get { | |
return pageIndex >= TotalPage ? TotalPage : pageIndex + 1; | |
} | |
} | |
private int pageIndex = 1; | |
/// <summary> | |
/// 当前页数 | |
/// </summary> | |
public int PageIndex | |
{ | |
get | |
{ | |
return pageIndex; | |
} | |
set | |
{ | |
if (value >= 1) | |
{ | |
pageIndex = value; | |
} | |
} | |
} | |
private int totalCount; | |
/// <summary> | |
/// 最大个数 | |
/// </summary> | |
public int TotalCount | |
{ | |
get | |
{ | |
return totalCount; | |
} | |
set | |
{ | |
totalCount = value < 0 ? 0 : value; | |
} | |
} | |
/// <summary> | |
/// 当前页面列表 | |
/// </summary> | |
public List<T> List { get; set; } | |
/// <summary> | |
/// 最大页数 | |
/// </summary> | |
public int TotalPage | |
{ | |
get | |
{ | |
return (int)Math.Ceiling(TotalCount / (double)PageSize) <= 0 ? 1 : (int)Math.Ceiling(TotalCount / (double)PageSize); | |
} | |
} | |
private int pageLabelCount = 5; | |
/// <summary> | |
/// 页标个数 | |
/// </summary> | |
public int PageLabelCount | |
{ | |
get { return pageLabelCount; } | |
set { pageLabelCount = value <= 0 ? 1 : value; } | |
} | |
/// <summary> | |
/// 取得页标列表 | |
/// </summary> | |
/// <returns></returns> | |
public int[] GetPageLabel() | |
{ | |
PageIndex = PageIndex > TotalPage ? TotalPage : PageIndex; | |
if (pageLabelCount == 1) | |
{ | |
return new int[] { PageIndex }; | |
} | |
List<int> list = new List<int>(); | |
int startPage = 0; | |
int endPage = 0; | |
if (PageLabelCount == 2) | |
{ | |
startPage = PageIndex == TotalPage ? PageIndex - 1 : PageIndex; | |
startPage = startPage < 1 ? 1 : startPage; | |
endPage = startPage + 1; | |
endPage = endPage > TotalPage ? TotalPage : endPage; | |
} | |
else if (PageLabelCount % 2 == 0) | |
{ | |
int labelPage = (int)Math.Floor((PageIndex - 2) / (double)(PageLabelCount - 2)) + 1; | |
startPage = (labelPage - 1) * (PageLabelCount - 2) + 1; | |
startPage = startPage < 1 ? 1 : startPage; | |
startPage = startPage > TotalPage ? TotalPage : startPage; | |
endPage = startPage + PageLabelCount - 1; | |
endPage = endPage > TotalPage ? TotalPage : endPage; | |
endPage = endPage < 1 ? 1 : endPage; | |
} | |
else | |
{ | |
startPage = PageIndex - ((PageLabelCount - 1) / 2); | |
startPage = startPage < 1 ? 1 : startPage; | |
startPage = startPage > TotalPage ? TotalPage : startPage; | |
endPage = startPage + PageLabelCount - 1; | |
endPage = endPage > TotalPage ? TotalPage : endPage; | |
endPage = endPage < 1 ? 1 : endPage; | |
} | |
for (int i = startPage; i <= endPage; i++) | |
{ | |
list.Add(i); | |
} | |
return list.ToArray(); | |
} | |
public IEnumerator<T> GetEnumerator() | |
{ | |
return List.GetEnumerator(); | |
} | |
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() | |
{ | |
return List.GetEnumerator(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment