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; } } }