c# - 使用 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(IEnumerable
1 可枚举)\r\n 在 System.Collections.Generic.List1.InsertRange(Int32 index, IEnumerable
1 个集合)\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.DataSourceLoaderImpl
1.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}
解决方案
试试这个解决方案,不要返回 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.summary
、remoteOperations.groupPaging
或remoteOperations
属性未设置或设置为 false。
请参阅:https ://demos.devexpress.com/ASPNetCore/Demo/DataGrid/WebAPIService/
推荐阅读
- android - USSD响应失败:messege PlatformException(ussd_plugin_ussd_response_failed,USSD_RETURN_FAILURE,null)
- java - 如何从 Firebase Android Query 中的 StartAt 特定位置和 EndAt 特定位置获取值
- c# - 如何让等到所有线程完成它从c#中的线程池工作
- ios - console.log 日志未显示在 Xcode 调试记录器中,也未显示在 Safari 调试记录器中
- c++ - 找不到文本文件?
- javascript - jQuery ajax async false 修改页面中的 html
- excel - 复制一个值并粘贴相同的值,直到它到达特定的单元格
- c# - 如何使用 MSBuild 构建项目?
- sql - 多行问题
- ansible - Ansible 错误:对 smtp.office365.com:587 的身份验证失败,请检查您的用户名和/或密码