public ActionResult Index(int? page, int? size, ListFilterVM filter = null) { int pageNumber = 1; int pageSize = 5; if (page.HasValue) pageNumber = page.Value; if (size.HasValue) pageSize = size.Value; var customerList = customerService.GetCustomers(); if (filter != null) { customerList = customerService.ApplyFilters(customerList, filter); } int totalRowCount = customerList.Count(); int itemstoSkip = pageSize * (pageNumber - 1); customerList = customerList.Skip(itemstoSkip).Take(pageSize).ToList(); var customerListVM = new CustomerListViewModel { Customers = customerList }; ApplyPagingInformation(pageNumber, pageSize, customerListVM.PagingDetails, totalRowCount); if (Request.IsAjaxRequest()) { // If it is an ajax request ( from Sorting/Filtering event or by clicking on a page number), send the response in JSON format var pagingMarkup = RenderPartialView("TablePagingFooter", customerListVM.PagingDetails, new ViewDataDictionary { { "baseurl", Url.Action("Index", "Home") + "?c" } }); return Json(new { ListingMarkup = RenderPartialView("Partial/Index", customerListVM), PagingMarkup = pagingMarkup }, JsonRequestBehavior.AllowGet); } return View(customerListVM); }
public List<Customer> ApplyFilters(List<Customer> clientList, ListFilterVM search) { // If the last event was SEARCH (That means first event was Sort), Let's sort the results first before it the search criteria runs on it. if ((!String.IsNullOrEmpty(search.LastEvent) && (search.LastEvent.ToUpper() == "FILTER"))) { clientList = SortClientList(clientList, search); } if (search.Filters != null) { foreach (var filter in search.Filters) { clientList = FilterWithName(clientList, filter).ToList(); clientList = FilterWithCity(clientList, filter).ToList(); clientList = FilterWithRegistrationDate(clientList, filter).ToList(); } } if ((!String.IsNullOrEmpty(search.LastEvent)) && (search.LastEvent.ToUpper() == "SORT")) { // If the last event was SORT (That means first event was Sort), Let's sort the results now clientList = SortClientList(clientList, search); } return clientList; }
private List<Customer> SortClientList(List<Customer> clientList, ListFilterVM filter) { //Let's sort first and then filter if (!String.IsNullOrEmpty(filter.SortColumnName)) { if (filter.SortColumnName.ToUpper() == "FIRSTNAME") { if (!String.IsNullOrEmpty(filter.SortType) && filter.SortType.ToUpper() == "DESC") clientList = clientList.OrderByDescending(s => s.FirstName).ToList(); else clientList = clientList.OrderBy(s => s.FirstName).ToList(); } else if (filter.SortColumnName.ToUpper() == "CITY") { if (!String.IsNullOrEmpty(filter.SortType) && filter.SortType.ToUpper() == "DESC") clientList = clientList.OrderByDescending(s => s.City).ToList(); else clientList = clientList.OrderBy(s => s.City).ToList(); } else if (filter.SortColumnName.ToUpper() == "REGISTRATIONDATE") { if (!String.IsNullOrEmpty(filter.SortType) && filter.SortType.ToUpper() == "DESC") clientList = clientList.OrderByDescending(s => s.RegistrationDate).ToList(); else clientList = clientList.OrderBy(s => s.RegistrationDate).ToList(); } } return clientList; }