首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用跳过/采用loadOptions在DevExtreme dxDataGrid上进行分页

使用跳过/采用loadOptions在DevExtreme dxDataGrid上进行分页
EN

Stack Overflow用户
提问于 2021-03-08 18:32:51
回答 1查看 278关注 0票数 0

我们有一个包含大量数据的表,我不想为我的dxDataGrid一次加载它。

我想使用dxDataGrid的DataSourceLoadOptions提供的Skip / Take实现分页。

这是我的控制器:

代码语言:javascript
复制
[HttpGet]
    public async Task<Object> GetSalesOrdersWithTotals(DataSourceLoadOptions loadOptions)
    {
        try
        {
            var results =  await SalesOrderService.GetSalesOrdersWithTotals(loadOptions.Skip, loadOptions.Take, 40);
            loadOptions.Skip = 0;
            loadOptions.Take = 0;
            return DataSourceLoader.Load(results, loadOptions);
        }
        catch (Exception ex)
        {
            return Json(new { code = "422", success = false, message = "Unable to fetch sales orders with totals - " + ex.ToString() });
        }
    }

这是返回数据的服务:

代码语言:javascript
复制
public async Task<IEnumerable<SalesOrderWithTotals>> GetSalesOrdersWithTotals(int skip, int take, int defaultPageSize)
    {
        if (take == 0)
        {
            //Fix for passing a 0 take
            take = defaultPageSize;
        }
        var salesOrderWithTotals =
        from o in _context.SalesOrder
        select new SalesOrderWithTotals
        {
            SalesOrderId = o.SalesOrderId,
            Net = _context.SalesOrderItem.Where(it => it.SalesOrderId == o.SalesOrderId).Select(it => it.Qty == null ? 0 : it.Qty.Value * it.UnitPrice == null ? 0 : it.UnitPrice.Value).Sum(),
            Tax = _context.SalesOrderItem.Where(it => it.SalesOrderId == o.SalesOrderId).Select(it => it.Qty == null ? 0 : it.Qty.Value * it.UnitPrice == null ? 0 : it.UnitPrice.Value).Sum() * (o.Tax.Percentage /100),
            Gross = _context.SalesOrderItem.Where(it => it.SalesOrderId == o.SalesOrderId).Select(it => it.Qty == null ? 0 : it.Qty.Value * it.UnitPrice == null ? 0 : it.UnitPrice.Value).Sum() + _context.SalesOrderItem.Where(it => it.SalesOrderId == o.SalesOrderId).Select(it => it.Qty == null ? 0 : it.Qty.Value * it.UnitPrice == null ? 0 : it.UnitPrice.Value).Sum() * (o.Tax.Percentage / 100),
            Name = o.Customer.Name,
            CustomerOrderNumber = o.CustomerOrderNumber,
            Contact = o.Contact,
            OrderDate = o.OrderDate
        };
        return await salesOrderWithTotals.Skip(skip).Take(take).ToListAsync();
    }

查看SQL profiler,这将获取前40条记录,但dxDataGrid当然不知道记录的总数,因此分页不可用。

在这种情况下,实现我想要的最好的方法是什么?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-12 22:47:03

您必须执行一个额外的查询来获取SalesOrder的计数并将其保存在例如salesOrderCount中。然后保持Load方法返回的数据如下。

代码语言:javascript
复制
LoadResult result = DataSourceLoader.Load(results, loadOptions);

LoadResult有一个名为totalCount的参数,因此请将其设置为数据的实际计数:

代码语言:javascript
复制
result.totalCount = salesOrderCount;

然后

代码语言:javascript
复制
return result;

现在dxDataGrid知道了记录的总数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66528202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档