Class for paging for generic collections
Import namespaces
using System.Collections;
using System.Collections.Generic;
using System.Linq;
Class for paging
public class PagingCollection : IEnumerable
{
#region fields
private const int DefaultPageSize = 10;
private readonly IEnumerable _collection;
private int _pageSize = DefaultPageSize;
#endregion
#region properties
///
/// Gets or sets page size
///
public int PageSize
{
get
{
return _pageSize;
}
set
{
if (value <=
0)
{
throw new ArgumentException();
}
_pageSize = value;
}
}
///
/// Gets pages count
///
public int PagesCount
{
get
{
return (
int)
Math.Ceiling(_collection.Count() / (
decimal)PageSize);
}
}
#endregion
#region ctor
///
/// Creates paging collection and sets page size
///
public PagingCollection(
IEnumerable collection, int pageSize)
{
if (collection == null)
{
throw new ArgumentNullException("collection");
}
PageSize = pageSize;
_collection = collection.ToArray();
}
///
/// Creates paging collection
///
public PagingCollection(
IEnumerable collection)
: this(collection, DefaultPageSize)
{ }
#endregion
#region public methods
///
/// Returns data by page number
///
public IEnumerable GetData(int pageNumber)
{
if (pageNumber < 0 || pageNumber > PagesCount)
{
return new T[] { };
}
int offset = (pageNumber - 1) * PageSize;
return _collection.Skip(offset).Take(PageSize);
}
///
/// Returns number of items on page by number
///
public int GetCount(
int pageNumber)
{
return GetData(pageNumber).Count();
}
#endregion
#region static methods
///
/// Returns data by page number and page size
///
public static IEnumerable GetPaging(IEnumerable collection, int pageNumber, int pageSize)
{
return new PagingCollection(collection, pageSize).GetData(pageNumber);
}
///
/// Returns data by page number
///
public static IEnumerable GetPaging(IEnumerable collection, int pageNumber)
{
return new PagingCollection(collection, DefaultPageSize).GetData(pageNumber);
}
#endregion
#region IEnumerable Members
///
/// Returns an enumerator that iterates through collection
///
public IEnumerator GetEnumerator()
{
return _collection.GetEnumerator();
}
#endregion
#region IEnumerable Members
///
/// Returns an enumerator that iterates through collection
///
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
#endregion
}
Use
// fill test data
var data = new List<int>();
for (int i = 0; i < 25; i++)
{
data.Add(i);
}
// create paging collection
var paging = new PagingCollection<int>(data);
// set page size
paging.PageSize = 6;
// get number of pages
Console.WriteLine("Pages count: {0}", paging.PagesCount);
// iterate through pages
for (int i = 1; i <= paging.PagesCount; i++)
{
// get number of items on page
Console.WriteLine("Page: {0} ({1} items)", i, paging.GetCount(i));
// get data by page number
foreach (int number in paging.GetData(i))
{
Console.WriteLine(number);
}
}