InventoryManager / Models / PagerModel.cs
PagerModel.cs
Raw
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Collections.Generic;

namespace InventoryManager.Models
{
    public class PagerModel
    {
        //Read only properties
        public int TotalItems { get; private set; }
        public int CurrentPage { get; private set; }
        public int PageSize { get; private set; }
        public int TotalPages { get; private set; }
        public int StartPage { get; private set; }
        public int EndPage { get; private set; }
        public int StartRecord { get; private set; }
        public int EndRecord { get; private set; }

        //Public properties

        public string Action { get; set; } = "Index";
        public string SearchText { get; set; }
        public string SortExpression { get; set;}


        public PagerModel(int totalItems, int currentPage, int pageSize = 5)
        {
            this.TotalItems = totalItems;
            this.CurrentPage = currentPage;
            this.PageSize = pageSize;

            //set total pages rounding to next highest int
            int totalPages = (int)Math.Ceiling((decimal)totalItems / (decimal)pageSize);
            TotalPages = totalPages;

            int startPage = currentPage - 5;
            int endpage = currentPage + 4;

            //set start page protection
            if (startPage <= 0)
            {
                endpage = endpage - (startPage - 1);
                startPage = 1;
            }

            //set end page protection
            if (endpage > totalPages)
            {
                endpage = totalPages;
                if (endpage > 10)
                    startPage = endpage -9;
            }

            StartRecord = (currentPage - 1) * pageSize + 1;

            EndRecord = StartRecord - 1 + PageSize;

            //ensure end records never exeeds total amount of items
            if (EndRecord > TotalItems)
            {
                EndRecord = TotalItems;
            }

            if (TotalItems == 0)
            {
                StartPage = 0;
                StartRecord = 0;
                CurrentPage = 0;
                EndRecord = 0;
            }
            else
            {
                StartPage = startPage;
                EndPage = endpage;
            }

        }


        public List<SelectListItem> GetPageSizes()
        {
            var pageSizes = new List<SelectListItem>();
            for(int lp = 5; lp<50; lp +=5)
            {
                if (lp == this.PageSize)
                {
                    pageSizes.Add(new SelectListItem(lp.ToString(), lp.ToString(), true));
                }
                else
                    pageSizes.Add(new SelectListItem(lp.ToString(), lp.ToString()));
            }
            return pageSizes;
        }
        
    }
}