Skip to content

Instantly share code, notes, and snippets.

@ss22219
Last active April 5, 2016 03:59
Show Gist options
  • Save ss22219/6873526 to your computer and use it in GitHub Desktop.
Save ss22219/6873526 to your computer and use it in GitHub Desktop.
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