X

Pager class

Once I wrote a class to make paging calculations. I had some data bound user controls that had no paging support. So I had to improvise. As it is was pointless to duplicate pager code to every user control where I needed paging I wrote a class to make my life easier.

/// <summary>
/// Class for data pager calculations.
/// </summary>
public class Pager
{
    /// <summary>
    /// Number of current page.
    /// </summary>
    public int CurrentPage = 1;

    /// <summary>
    /// Number of previous page.
    /// </summary>
    public int PreviousPage = 1;

    /// <summary>
    /// Number of next page.
    /// </summary>
    public int NextPage = 1;

    /// <summary>
    /// Count of pages.
    /// </summary>
    public int PageCount = 1;

    /// <summary>
    /// Page's first row index in collection.
    /// </summary>
    public int StartRow = 0;

    /// <summary>
    /// Pages last row index in collection plus one.
    /// It is meant to use in for loop.
    /// </summary>
    public int StopBeforeRow = 0;

    /// <summary>
    /// Returns pager object with values based on given parameters.
    /// </summary>
    /// <param name="pageNo">Number of current page.</param>
    /// <param name="pageSize">Page size.</param>
    /// <param name="collectionSize">Size of rows or items collection.</param>
    /// <returns></returns>
    public static Pager GetPager(int pageNo, int pageSize, int collectionSize)
    {
        Pager pg = new Pager();

        pg.CurrentPage = pageNo;
        pg.PageCount = (int)Math.Ceiling((double)collectionSize / pageSize);
        if (pg.CurrentPage > pg.PageCount)
            pg.CurrentPage = pg.PageCount;

        if (pageNo > 1)
            pg.PreviousPage = pg.CurrentPage - 1;
        else
            pg.PreviousPage = 1;

        if (pg.CurrentPage >= pg.PageCount)
            pg.NextPage = pg.PageCount;
        else
            pg.NextPage = pg.CurrentPage + 1;

        pg.StartRow = (pg.CurrentPage - 1) * pageSize;
        pg.StopBeforeRow = pg.CurrentPage * pageSize;

        if (pg.StopBeforeRow > collectionSize)
            pg.StopBeforeRow = collectionSize;
        return pg;
    }
}

As you can see this class takes also care of inconsistent parameters and handles them so your code doesn’t stop working.

Liked this post? Empower your friends by sharing it!
Categories: .NET

View Comments (2)

Related Post