using System.Collections.Generic;
namespace Oyang.Tool
{
public interface IPagination
{
int PageIndex { get; set; }
int PageSize { get; set; }
int TotalCount { get; set; }
string SortField { get; set; }
bool IsAsc { get; set; }
}
public interface IFullPagination : IPagination
{
int PageCount { get; }
int ButtonCount { get; set; }
List<int> ListPageButton { get; }
List<int> CalcPageButton();
}
public class Pagination : IPagination
{
public int PageIndex { get; set; }
public int PageSize { get; set; }
public int TotalCount { get; set; }
public string SortField { get; set; }
public bool IsAsc { get; set; }
}
public class FullPagination : Pagination, IFullPagination
{
public int PageCount
{
get { return TotalCount % PageSize == 0 ? TotalCount / PageSize : TotalCount / PageSize + 1; }
}
public int ButtonCount { get; set; } = 5;
List<int> _listPageButton = null;
public List<int> ListPageButton { get; }
public List<int> CalcPageButton()
{
_listPageButton = new List<int>();
int temp1 = (ButtonCount - 1) / 2;
int temp2 = ButtonCount - 1 - temp1;
int startPageIndex = 1;
int endPageIndex = 1;
if (PageCount <= ButtonCount)
{
startPageIndex = 1;
endPageIndex = PageCount;
}
else if (PageIndex <= temp1)
{
startPageIndex = 1;
endPageIndex = startPageIndex + ButtonCount - 1;
}
else if (PageIndex + temp2 > PageCount)
{
endPageIndex = PageCount;
startPageIndex = endPageIndex - ButtonCount + 1;
}
else
{
startPageIndex = PageIndex - temp1;
endPageIndex = PageIndex + temp2;
}
for (int i = startPageIndex; i <= endPageIndex; i++)
{
_listPageButton.Add(i);
}
return _listPageButton;
}
}
}