public virtual ActionResult GridSearch(GridDataRequest request, TSearchFilter searchFilter) { IEnumerable <TEntity> result = _service.Search(searchFilter); IEnumerable <TEntityViewModel> resultView = Mapper.Map <IEnumerable <TEntity>, IEnumerable <TEntityViewModel> >(result); return(Json(GridDataResponse.Create(request, resultView, 0), JsonRequestBehavior.AllowGet)); }
public override ActionResult GridSearch(GridDataRequest request, OrderItemFilter searchFilter) { IEnumerable <OrderItem> result = _service.Search(searchFilter); IEnumerable <OrderItemViewModel> resultView = Mapper.Map <IEnumerable <OrderItem>, IEnumerable <OrderItemViewModel> >(result); foreach (OrderItemViewModel orderItem in resultView) { orderItem.TotalPrice = orderItem.ProductPrice * orderItem.Amount.Value; } return(Json(GridDataResponse.Create(request, resultView, 0), JsonRequestBehavior.AllowGet)); }
/// <summary> /// Generates a GridDataResponse using the GridDataRequest and an IQueryable source, /// like a DataSet in Entity Framework. /// </summary> /// <param name="request">The Tubular Grid Request.</param> /// <param name="dataSource">The IQueryable source.</param> /// <param name="preProcessSubset">The subset's process delegate.</param> /// <returns>A grid response.</returns> public static GridDataResponse CreateGridDataResponse( this GridDataRequest request, IQueryable dataSource, Func <IQueryable, IQueryable>?preProcessSubset = null) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (dataSource == null) { throw new ArgumentNullException(nameof(dataSource)); } if (request.Columns.Any() != true) { throw new ArgumentOutOfRangeException(nameof(request), "Missing column information"); } var response = new GridDataResponse { Counter = request.Counter, TotalRecordCount = dataSource.Count(), FilteredRecordCount = dataSource.Count(), }; var properties = dataSource.ElementType.ExtractProperties(); var columnMap = MapColumnsToProperties(request.Columns, properties); var subset = FilterResponse(request, dataSource, response); // Perform Sorting var orderingExpression = request.Columns.Where(x => x.SortOrder > 0) .OrderBy(x => x.SortOrder) .Aggregate(string.Empty, (current, column) => current + (column.Name + " " + (column.SortDirection == SortDirection.Ascending ? "ASC" : "DESC") + ", ")); // Apply the sorting expression if supplied subset = !string.IsNullOrWhiteSpace(orderingExpression) ? subset.OrderBy(orderingExpression[..^ 2])