Mega Code Archive

 
Categories / C# / Collections Data Structure
 

Generic Paged List

using System.Linq; namespace System.Collections.Generic {   public class PagedList<T> : List<T>, IPagedList<T> {     public static int DefaultPageSize { get { return 10; } }     private IEnumerable<T> _sourceList = null;     private int _pageSize = DefaultPageSize;     private int _pageIndex = 0;     //public PagedList() : base() { }     public PagedList(IEnumerable<T> sourceList = null)       : base() {       _sourceList = sourceList;       RefreshDisplayedRows();     }     public IEnumerable<T> SourceList {       get { return _sourceList; }       set {         _sourceList = value;         RefreshDisplayedRows();       }     }     public int PageSize {       get { return _pageSize; }       set {         _pageSize = (value < 0 ? 0 : value);         RefreshDisplayedRows();       }     }     public int TotalCount { get { return _sourceList == null ? 0 : _sourceList.Count(); } }     public int PageCount { get { return _pageSize == 0 ? 1 : ((int)(TotalCount / _pageSize) + (TotalCount % _pageSize == 0 ? 0 : 1)); } }     public int PageIndex { get { return _pageIndex; } set { SetPage(value); } }     private void SetPage(int pageIndex) {       if (TotalCount == 0 || pageIndex < 0) _pageIndex = 0;       else if (pageIndex > (PageCount - 1)) _pageIndex = (PageCount - 1);       else _pageIndex = pageIndex;       RefreshDisplayedRows();     }     private void RefreshDisplayedRows() {       Clear();       if (_sourceList != null) AddRange(_sourceList.Skip(_pageIndex * _pageSize).Take(_pageSize).ToList());     }     public bool HasPreviousPage { get { return PageIndex > 0; } }     public bool HasNextPage { get { return PageIndex < (PageCount - 1); } }     public void GetFirstPage() { if (HasPreviousPage) SetPage(0); }     public void GetPreviousPage() { if (HasPreviousPage) SetPage(PageIndex - 1); }     public void GetNextPage() { if (HasNextPage) SetPage(PageIndex + 1); }     public void GetLastPage() { if (HasNextPage) SetPage(PageCount - 1); }     public int PageIndexOf(T item) {       var index = _sourceList.ToList().IndexOf(item);       if (index < 0) return -1;       return ((int)((index + 1) / _pageSize) + ((index + 1) % _pageSize == 0 ? 0 : 1)) - 1;     }     //public int LastPageOf(T item) {     //    var index = _sourceList.ToList().LastIndexOf(item);     //    if (index < 0) return -1;     //    return (int)((index + 1) / _pageSize) + ((index + 1) % _pageSize == 0 ? 0 : 1);     //}     public void ShowPageOf(T item) {       var pageIndex = PageIndexOf(item);       if (pageIndex < 0) return;       SetPage(pageIndex);     }     //public void ShowLastPageOf(T item) {     //    var pageIndex = LastPageOf(item);     //    if (pageIndex < 0) return;     //    SetPage(pageIndex);     //}     public bool IsVisible(T item) {       return _pageIndex == PageIndexOf(item);// || PageIndex == LastPageOf(item));     }   } } namespace System.Collections.Generic {   public interface IPagedList<T> : IList<T> {     int PageSize { get; set; }     int TotalCount { get; }     int PageCount { get; }     int PageIndex { get; set; }     //void SetPage(int pageIndex);     bool HasPreviousPage { get; }     bool HasNextPage { get; }     void GetFirstPage();     void GetPreviousPage();     void GetNextPage();     void GetLastPage();     int PageIndexOf(T item);     void ShowPageOf(T item);     //int LastPageOf(T item);     //void ShowLastPageOf(T item);     bool IsVisible(T item);   } }