- 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;
- }
- }
- }