PagedEnumerable.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace NBAManagment.Filter
  8. {
  9. public class PagedEnumerable<T> : IFilteredEnumerable<T>
  10. {
  11. private const int START_PAGE_NUM = 1;
  12. private readonly PageFilter<T> pageFilter;
  13. public PagedEnumerable(IEnumerable<T> collection, int pageSize)
  14. {
  15. this.Original = collection;
  16. pageFilter = new PageFilter<T>(pageSize, START_PAGE_NUM);
  17. UpdateFiltered();
  18. }
  19. public int CurrentPageItemCount => Original.Count();
  20. public int ItemCount => Filtered.Count();
  21. public IEnumerable<T> Original { get; set; }
  22. public IEnumerable<T> Filtered { get; private set; }
  23. public int PageCount => pageFilter.GetPageCount(Original);
  24. public int PageSize
  25. {
  26. get => pageFilter.PageSize;
  27. set
  28. {
  29. pageFilter.PageSize = value;
  30. UpdateFiltered();
  31. }
  32. }
  33. public int CurrentPageNum
  34. {
  35. get => pageFilter.CurrentPageNum;
  36. set
  37. {
  38. if (value > PageCount)
  39. {
  40. pageFilter.CurrentPageNum = PageCount;
  41. }
  42. else if (value <= 0)
  43. {
  44. pageFilter.CurrentPageNum = 1;
  45. }
  46. else
  47. {
  48. pageFilter.CurrentPageNum = value;
  49. }
  50. UpdateFiltered();
  51. }
  52. }
  53. public void NextPage()
  54. {
  55. CurrentPageNum++;
  56. UpdateFiltered();
  57. }
  58. public void PriviusPage()
  59. {
  60. CurrentPageNum--;
  61. UpdateFiltered();
  62. }
  63. public IEnumerator<T> GetEnumerator()
  64. {
  65. return Filtered.GetEnumerator();
  66. }
  67. IEnumerator IEnumerable.GetEnumerator()
  68. {
  69. return Filtered.GetEnumerator();
  70. }
  71. private void UpdateFiltered()
  72. {
  73. Filtered = pageFilter.Use(Original);
  74. }
  75. }
  76. }