首页 > 解决方案 > 使用 DevExtreme、SummaryType.Custom 获取错误

问题描述

我尝试在下一个示例中这样做:

https://js.devexpress.com/Demos/Widgetsgallery/Demo/DataGrid/CustomSummaries/NetCore/Light/

我尝试为我的网格创建自定义摘要

例如,在下一张图片中,我有红色列和蓝色列,我想将其总结为(在伪代码中)

Sum = 0;
  if({RedColumn}.Value == D){
      Sum -= {BlueColumn}.Value
   }else{
      Sum += {BlueColumn}.Value
   }

在此处输入图像描述

我预计会得到 347.74 -218.46 +272.7 = 401.98 而不是 838.9

我还创建了下一个方法(我知道它还没有完成,但我什至没有进入这个方法,我得到了错误):

 function CalculateCustomSummary(options) {
        if (options.name === "SelectedRowsSummary") {
            if (options.summaryProcess === "start") {
                options.CdAmt = 0;
            }
            if (options.summaryProcess === "calculate") {
                options.CdAmt = options.CdAmt + options.value.CdAmt;
            }
        }
    }

这是我的夏天:

   .Summary(s => s.GroupItems(items => items.AddFor(t=>t.CdAmt)
                    .Name("SelectedRowsSummary")
                    .ShowInColumn("CdAmt")
                    .DisplayFormat("Sum: {0}")
                    .ValueFormat(Format.Decimal)
                    .SummaryType(SummaryType.Custom)
             ).CalculateCustomSummary("CalculateCustomSummary"))

这是我在服务器端的加载操作 (.LoadAction("{FuncName}"))

[HttpGet]
public async Task<IActionResult> {FuncName}(int Id, DataSourceLoadOptions loadOptions ... more params)
{
    try
    {
        IQueryable<X> hzInfos;
        hzInfos = _hService.GetAllHZ();  
        return Json(DataSourceLoader.Load(hzInfos, loadOptions));
    }
    catch (Exception ex)
    {
        _log.LogError($"Method Name: {System.Reflection.MethodBase.GetCurrentMethod().Name}, " +
           $"Exception: {ex}");
        return StatusCode(500);
    }
}

在下一行: return Json(DataSourceLoader.Load(hzInfos, loadOptions));

我得到了下一个错误:

“不支持指定的方法。”

" 在 DevExtreme.AspNet.Data.RemoteGrouping.RemoteGroupExpressionCompiler.GetPreAggregateMethodName(String summaryType)\r\n 在 DevExtreme.AspNet.Data.RemoteGrouping.RemoteGroupExpressionCompiler.MakeAggregate(Expression aggregateTarget, SummaryInfo s)\r\n 在 DevExtreme.AspNet.Data .RemoteGrouping.RemoteGroupExpressionCompiler.d__8.MoveNext()\r\n 在 System.Collections.Generic.List 1.AddEnumerable(IEnumerable1 可枚举)\r\n 在 System.Collections.Generic.List1.InsertRange(Int32 index, IEnumerable1 个集合)\r\n 在 DevExtreme.AspNet.Data.RemoteGrouping.RemoteGroupExpressionCompiler.MakeAggregatingProjection(表达式目标,Type groupingType,AnonTypeFacade groupKeyTypeFacade)\r\n 在 DevExtreme.AspNet.Data.RemoteGrouping.RemoteGroupExpressionCompiler.Compile(表达式目标)\ r\n 在 DevExtreme.AspNet.Data.DataSourceExpressionBuilder.AddRemoteGrouping(Boolean suppressGroups, Boolean suppressTotals)\r\n 在 DevExtreme.AspNet.Data.DataSourceExpressionBuilder.BuildLoadGroupsExpr(Boolean paginate, Boolean suppressGroups, Boolean suppressTotals)\r\n 在 DevExtreme .AspNet.Data.DataSourceLoaderImpl1.<ExecRemoteGroupingAsync>d__13.MoveNext()\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at DevExtreme.AspNet.Data.DataSourceLoaderImpl1.d__5.MoveNext()\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 DevExtreme.AspNet。 Data.DataSourceLoader.Load[T](IQueryable`1 源,DataSourceLoadOptionsBase 选项)\r\n 在 {路径} 中的 CardTranzactions.Controllers.HovaZehutSTHZController.d__11.MoveNext()

我能做些什么呢?

通过评论建议在另一次尝试中更改我的代码:

    [HttpGet]
    public async Task<IActionResult> {FuncName}(int Id, DataSourceLoadOptions loadOptions ... more params)
    {
        try
        {
            List<X> hzInfos;
            hzInfos = _hService.GetAllHZ().ToList();  
            return Json(DataSourceLoader.Load(hzInfos, loadOptions));
        }
        catch (Exception ex)
        {
            _log.LogError($"Method Name: {System.Reflection.MethodBase.GetCurrentMethod().Name}, " +
               $"Exception: {ex}");
            return StatusCode(500);
        }
    }
    
    
    
    
    
    
    
       at DevExtreme.AspNet.Data.Aggregation.AggregateCalculator`1.CreateAggregator(SummaryInfo summaryInfo)
       at System.Linq.Enumerable.SelectArrayIterator`2.ToArray()
       at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
       at DevExtreme.AspNet.Data.Aggregation.AggregateCalculator`1.ProcessGroup(Group group)
       at DevExtreme.AspNet.Data.Aggregation.AggregateCalculator`1.ProcessItem(Object item)
       at DevExtreme.AspNet.Data.Aggregation.AggregateCalculator`1.Run()
       at DevExtreme.AspNet.Data.DataSourceLoaderImpl`1.<ContinueWithAggregationAsync>d__9`1.MoveNext()
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at DevExtreme.AspNet.Data.DataSourceLoaderImpl`1.<ContinueWithGroupingAsync>d__8`1.MoveNext()
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at DevExtreme.AspNet.Data.DataSourceLoaderImpl`1.<LoadAsync>d__5.MoveNext()
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at DevExtreme.AspNet.Data.DataSourceLoader.Load[T](IQueryable`1 source, DataSourceLoadOptionsBase options)
       at CardTranzactions.Controllers.HovaZehutSTHZController.<GetHZ>d__11.MoveNext() in {the path}

标签: c#devextreme

解决方案


试试这个解决方案,不要返回 JSON,只需遵循 .Net Core 的 WebApi 指南:

[HttpGet]
public async Task<object> {FuncName}(int Id, DataSourceLoadOptions loadOptions ... more params)
{
    try
    {
        return DataSourceLoader.Load(_hService.GetAllHZ(), loadOptions);
    }
    catch (Exception ex)
    {
        _log.LogError($"Method Name: {System.Reflection.MethodBase.GetCurrentMethod().Name}, " +
           $"Exception: {ex}");
        return StatusCode(500);
    }
}

还要确保remoteOperations.summaryremoteOperations.groupPagingremoteOperations属性未设置或设置为 false。

请参阅:https ://demos.devexpress.com/ASPNetCore/Demo/DataGrid/WebAPIService/


推荐阅读