Beispiel #1
0
        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));
        }
Beispiel #3
0
    /// <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])