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