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.

Gunnar Peipman

Gunnar Peipman is ASP.NET, Azure and SharePoint fan, Estonian Microsoft user group leader, blogger, conference speaker, teacher, and tech maniac. Since 2008 he is Microsoft MVP specialized on ASP.NET.

    2 thoughts on “Pager class

    • May 16, 2008 at 7:22 pm
      Permalink

      I am new to this. How do I impliment this class

    • May 19, 2008 at 6:08 am
      Permalink

      ager pager = Pager.GetPager(currentPage, 10, myTable.Rows.Count);

    Leave a Reply

    Your email address will not be published. Required fields are marked *