此函数只接收前端传过来的参数返回多少页的多少条数据,上一页下一页等前端算法在前端完成,后端只对查出的所有数据进行分页
一般情况sql分页就够了,此方法是为了应对二次处理后的数据分页
比如sql查出的数据,又进行分组及其他手段处理,前端还要分页显示,用此方法最是合适!
/// <summary>
/// 为列表分页/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataList">列表</param>
/// <param name="currentPage">当前页数</param>
/// <param name="pageSize">页大小</param>
/// <returns></returns>
/// <remarks>added by lihz 2013.11.28</remarks>
public Page<T> DataPaging<T>(IList<T> dataList, int currentPage, int pageSize) where T : class
{
if (dataList == null)
{
throw new ArgumentException("列表不可为空!");
}
if (pageSize <= 0)
{
throw new ArgumentException("页大小必须大于0!");
}
if (currentPage < 1)
{
throw new Exception("当前页数必须大于0");
}
int count = dataList.Count;
if (count == 0)
{
//记录条数为0,则尾页数为1
return new Page<T>
{
PageCurrent = 1,
total = 0,
PageSize = pageSize,
data = dataList
};
}
int quotient = count / pageSize;
int remainder = count % pageSize;
//尾页数
int maxPageCount = quotient + (remainder == 0 ? 0 : 1);
//如果当前页大于尾页数,则当前页为尾页数
if (currentPage > maxPageCount) currentPage = maxPageCount;
var page = new Page<T>
{
total = count,
PageSize = pageSize,
PageCurrent = currentPage
};
int beginIndex = (currentPage - 1) * pageSize;
int endIndex = currentPage * pageSize - 1;
//非满页
if (endIndex >= count) endIndex = count - 1;
for (int i = beginIndex; i <= endIndex; i++)
{
page.data.Add(dataList[i]);
}
return page;
}