Take a list of any object that is not paginated and paginate it. This could be done when retrieving data from a database. If you return all rows from a table and populate a list, this will allow you to paginate that list.
*Pagination should be done on the database side but this still is a useful function.
//using statements
using System;
using System.Collections.Generic;
.....
public static List<T> GetPaginatedList<T>(IList<T> source, int page, int recordsPerPage)
{
int startIndex = 0;
int endIndex = 0;
if (page <= 0)
{
page = 1;
}
if (recordsPerPage <= 0)
{
startIndex = 0;
endIndex = Int32.MaxValue;
}
else
{
startIndex = (page * recordsPerPage) - recordsPerPage;
endIndex = (page * recordsPerPage) - 1;
}
//Cap end Index
if (endIndex > source.Count - 1)
{
endIndex = source.Count - 1;
}
List<T> newList = new List<T>();
for (int x = startIndex; x <= endIndex; x++)
{
newList.Add((T)source[x]);
}
return newList;
}
....
//use of function
//fill non-paginated list
List<MyObject> nonPaginatedList = SomeSpecialFunctionThatFillsInTheList();
//create paginated list
int page = 1;
int recordsPerPage = 10;
List<MyObject> paginatedList = GetPaginatedList(nonPaginatedList, page, recordsPerPage);