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