public virtual ActionResult DataTables(DataTableCriteria searchCriteria) { // Generate Data List <DataTableRecord> allRecords = new List <DataTableRecord>(); int idCount = 0; int cellCount = 0; for (int i = 0; i < 100; i++) { allRecords.Add(new DataTableRecord() { Id = ++idCount, Column1 = "cell " + (++cellCount).ToString(), Column2 = "cell " + (++cellCount).ToString(), Column3 = "cell " + (++cellCount).ToString() }); } // Apply search criteria to data var filteredRecord = allRecords.ApplyCriteria(searchCriteria); // TODO: Apply searching in the ApplyCriteria function eventually... if (!string.IsNullOrWhiteSpace(searchCriteria.GlobalSearchText)) { filteredRecord = filteredRecord.Where(e => e.Column1.Contains(searchCriteria.GlobalSearchText) || e.Column2.Contains(searchCriteria.GlobalSearchText) || e.Column3.Contains(searchCriteria.GlobalSearchText)).ToList(); } // Create response var result = new DataGridResult <DataTableRecord>(); result.Data = filteredRecord.ToList(); result.DisplayedRecords = allRecords.Count(); result.TotalRecords = allRecords.Count(); return(Json(result)); }
public static IEnumerable <TEntity> ApplyCriteria <TEntity>(this IEnumerable <TEntity> query, DataTableCriteria criteria) { if (criteria == null) { return(query); } // Apply ordering to query. IList <DataTableColumnCriteria> columnCriteria = criteria.Columns .Where(e => e.IsSorted) .OrderBy(e => e.SortOrder) .ToList(); int k = 0; foreach (var c in columnCriteria) { if (c.SortDirection == SortDirection.Ascending) { if (k == 0) { query = query.AsQueryable().ApplyOrder(c.ColumnName, QuerySortOrder.OrderBy); } else { query = query.AsQueryable().ApplyOrder(c.ColumnName, QuerySortOrder.ThenBy); } } else { if (k == 0) { query = query.AsQueryable().ApplyOrder(c.ColumnName, QuerySortOrder.OrderByDescending); } else { query = query.AsQueryable().ApplyOrder(c.ColumnName, QuerySortOrder.ThenByDescending); } } k++; } // Apply paging to query.. query = query .Skip(criteria.RecordsToSkip) .Take(criteria.RecordsToTake); return(query); }