public IQueryable <T> PagerSearch <T>(PagerDescriptor pagerDesc, IQueryable <T> results, int recordCount) { int page1 = (int)Math.Ceiling((recordCount + 0.0) / pagerDesc.SelectedPageSize); if (pagerDesc.SelectedPage > page1) { pagerDesc.SelectedPage = page1; } pagerDesc.TotalRecordCount = recordCount; pagerDesc.TotalPageCount = page1; if (pagerDesc.SelectedPage > pagerDesc.TotalPageCount) { pagerDesc.SelectedPage = pagerDesc.TotalPageCount; } return(results.Skip((pagerDesc.SelectedPage - 1) * pagerDesc.SelectedPageSize).Take(pagerDesc.SelectedPageSize)); }
/// <summary> /// Generates html for given pager descriptor taking into account style rules used for SKF's sites. /// </summary> /// <param name="helper">The helper</param> /// <param name="descriptor">The descriptor for the pager</param> /// <returns>Generated IHtmlString for SKF pager</returns> public static IHtmlString KTMPager(this HtmlHelper helper, PagerDescriptor descriptor) { StringBuilder sb = new StringBuilder(); sb.Append("<div class=\"pager\">"); //sb.Append("<div class=\"page-size\">"); //sb.Append("<span class=\"text\">").Append(descriptor.PageSizeDescription).Append("</span>"); //for (int i = 0; i < descriptor.AllowedPageSizes.Count; i++) { // if (descriptor.AllowedPageSizes[i] == descriptor.SelectedPageSize) { // sb.Append("<span class=\"link-active\">").Append(descriptor.AllowedPageSizes[i]).Append("</span>"); // } else { // sb.Append("<a class=\"link\">").Append(descriptor.AllowedPageSizes[i]).Append("</a>"); // } //} //sb.Append("</div>"); sb.Append("<div class=\"pages\">"); int startPage = 0; int endPage = 0; bool generatePreviousPageSet = true; bool generateNextPageSet = true; if (descriptor.TotalRecordCount > 0) { // generate 'Previous page' link // ... if (descriptor.SelectedPage > 1) { sb.Append("<a class=\"previous\" page=\"" + (descriptor.SelectedPage - 1) + "\"></a>"); } // calculate page links if ((int)Math.Ceiling((descriptor.SelectedPage + 0.0) / descriptor.VisiblePageCount) == 1) { // the selected page is in the first set of pages generatePreviousPageSet = false; startPage = 1; if (descriptor.TotalPageCount < descriptor.VisiblePageCount) { endPage = descriptor.TotalPageCount; } else { endPage = descriptor.VisiblePageCount; } if (descriptor.VisiblePageCount >= descriptor.TotalPageCount) { generateNextPageSet = false; } } else if ((int)Math.Ceiling((descriptor.SelectedPage + 0.0) / descriptor.VisiblePageCount) == (int)(Math.Ceiling((descriptor.TotalPageCount + 0.0) / descriptor.VisiblePageCount))) { // the selected page is in the last set of pages startPage = (int)Math.Floor((descriptor.SelectedPage + 0.0) / descriptor.VisiblePageCount) * descriptor.VisiblePageCount + 1; endPage = descriptor.TotalPageCount; if (startPage > endPage) { startPage -= descriptor.VisiblePageCount; } generateNextPageSet = false; } else { // the selected page is in middle set of pages startPage = (int)Math.Floor((descriptor.SelectedPage + 0.0) / descriptor.VisiblePageCount) * descriptor.VisiblePageCount + 1; endPage = (int)Math.Ceiling((descriptor.SelectedPage + 0.0) / descriptor.VisiblePageCount) * descriptor.VisiblePageCount; if (startPage > endPage) { startPage -= descriptor.VisiblePageCount; } } // generate first page link, generate previous page set link: ( < | 1 | ... | 20 | 21 | 22) if (generatePreviousPageSet) { if (descriptor.SelectedPage % descriptor.VisiblePageCount != 0) { sb.Append("<a class=\"link\">1</a><a class=\"link pageset\" page=\"" + (int)(Math.Floor((descriptor.SelectedPage + 0.0) / descriptor.VisiblePageCount) * descriptor.VisiblePageCount) + "\">...</a>"); } else { sb.Append("<a class=\"link\">1</a><a class=\"link pageset\" page=\"" + (int)(Math.Floor((descriptor.SelectedPage - 1.0) / descriptor.VisiblePageCount) * descriptor.VisiblePageCount) + "\">...</a>"); } } // generate page links GeneratePageLinks(startPage, endPage, sb, descriptor); // generate next page set link, generate last page link: ( 27 | 28 | 29 | ... | 183 | > ) if (generateNextPageSet) { sb.Append("<a class=\"link pageset\" page=\"" + (int)(Math.Ceiling((descriptor.SelectedPage + 0.0) / descriptor.VisiblePageCount) * descriptor.VisiblePageCount + 1) + "\">...</a><a class=\"link-last\">" + descriptor.TotalPageCount + "</a>"); } // generate 'Next page' link if (descriptor.SelectedPage < descriptor.TotalPageCount) { sb.Append("<a class=\"next\" page=\"" + (descriptor.SelectedPage + 1) + "\"></a>"); } } sb.Append("</div>"); sb.Append("</div>"); return(MvcHtmlString.Create(sb.ToString())); }
private static void GeneratePageLinks(int startPage, int endPage, StringBuilder sb, PagerDescriptor descriptor) { if (startPage <= 0) { return; } for (int i = startPage; i <= endPage; i++) { if (i == descriptor.SelectedPage) { if (i == 1) { sb.Append("<span class=\"link-active-first\">").Append(i).Append("</span>"); } else { sb.Append("<span class=\"link-active\">").Append(i).Append("</span>"); } } else { sb.Append("<a class=\"link\">").Append(i).Append("</a>"); } } }