using System;
using System.Data;
namespace VmmPaperless.Controller
{
//
class Page
{
private DataTable bookTable; //要分页的DataTable
private int pageNo; //页码
private int pageCount; //总页数
private int size; //每页的大小
/// <summary>
/// 获取要分页的数据表
/// </summary>
public DataTable BookTable => bookTable;
/// <summary>
/// 获取可设置当前页码
/// </summary>
public int PageNo
{
get => pageNo;
set => pageNo = value;
}
/// <summary>
/// 获取总页数
/// </summary>
public int PageCount => pageCount;
/// <summary>
/// 设置要翻页读取的数据表,和每页的数据行数
/// </summary>
/// <param name="table"></param>
/// <param name="newSize"></param>
public void SetProperties(DataTable table, int newSize)
{
bookTable = table;
if (table != null)
{
size = newSize;
pageNo = 0;
if (newSize != 0)
{
pageCount = bookTable.Rows.Count % newSize == 0
? bookTable.Rows.Count / newSize
: bookTable.Rows.Count / newSize + 1;
}
else
pageCount = 0;
}
else
{
size = 0;
pageNo = 0;
pageCount = 0;
}
}
/// <summary>
/// 当页的大小不变,分页的数据表改变时重新设置个属性
/// </summary>
/// <param name="table"></param>
public void SetProperties(DataTable table)
{
if (table == null || size == 0)
{
pageCount = 0;
pageNo = 0;
return;
}
bookTable = table;
pageNo = 0;
pageCount = bookTable.Rows.Count % size == 0
? bookTable.Rows.Count / size
: bookTable.Rows.Count / size + 1;
}
/// <summary>
/// 当每页的行数改变时设置其他属性值
/// </summary>
/// <param name="newSize"></param>
public void SetProperties(int newSize)
{
if (newSize == 0 || bookTable == null)
{
pageNo = 0;
pageCount = 0;
size = newSize;
return;
}
pageNo = pageNo*size/newSize-1;
size = newSize;
pageCount = bookTable.Rows.Count % newSize == 0
? bookTable.Rows.Count / newSize
: bookTable.Rows.Count / newSize + 1;
}
/// <summary>
/// 获取指定页的数据表
/// </summary>
/// <param name="no">页码</param>
/// <returns></returns>
public DataTable NoPage(int no)
{
if (PageCount == 0)
return null;
if (no >= 1 && no <= pageCount)
{
pageNo = no;
if (bookTable == null)
return null;
DataTable table = bookTable.Clone();
no=(no-1)*size;
for (int i = 0; i < size&&no+i<bookTable.Rows.Count; i++)
table.Rows.Add(bookTable.Rows[no + i].ItemArray);
return table;
}
else if (Math.Abs(no - 1) > Math.Abs(no - pageCount))
return NoPage(pageCount);
else
return NoPage(1);
}
/// <summary>
/// 下一页
/// </summary>
/// <returns></returns>
public DataTable NextPage()
{
return NoPage(pageNo + 1);
}
/// <summary>
/// 上一页
/// </summary>
/// <returns></returns>
public DataTable LastPage()
{
return NoPage(pageNo - 1);
}
/// <summary>
/// 第一页
/// </summary>
/// <returns></returns>
public DataTable FirstPage()
{
return NoPage(1);
}
/// <summary>
/// 最后一页
/// </summary>
/// <returns></returns>
public DataTable TheLastPage()
{
return NoPage(pageCount);
}
}
}