devextreme datagrid 数据汇总统计相同数据

devextream data grid Data Summaries Count the same data

我正在使用 DevExtreme 并且想使用汇总功能。 如果同一列有相同的数据,则统计

let te_arr = [];
dxDataGrid({
 ..................
columns: [
                { dataField: "columnsTest", caption: "columnsTest"}
        ],
        summary: {
            recalculateWhileEditing: true,
            totalItems: [
                {
                    name: "SelectedRowsSummary",
                    showInColumn: "columnsTest",
                    displayFormat: "count: {0}",
                    summaryType: "custom"
                }],
                calculateCustomSummary: function (options) {
                    
                    if(options.value){
                        let data_state = options.value.columndata
                        console.log('data_state ',data_state );
                        if (options.name == "SelectedRowsSummary") {
                            if (options.summaryProcess === "start") {
                                options.totalValue = 0;
                            }
                            if (options.summaryProcess === "calculate") {
                                
                                if (data_state == 'Y') {
                                   te_arr.push(data_state );
                                   options.totalValue = te_arr.length;
                                }
                                
                            }
                        }
                    }
                   
                }
        },
.................

以上结果为7 结果,您获得了相同数据的总数,但是当处理诸如网格按钮 desc 或 asc 之类的事件时,该数字会加倍。 似乎是因为 calculateCustomSummary 已完成,之后它会在事件发生时继续触发。 应该如何处理?

您使用的概念是正确的 - 您分配总值的方式包含一个小错误 - 至少从我对您提供的代码的理解来看是这样。

你定义了数组 let te_arr = [];在 calculateCustomSummary 处理程序的范围之外,如果满足所有条件,您只会将 data_state 推送给它。

但您没有为每次 calculateCustomSummary 执行清除 te_arr。这就是为什么在一个事件之后你有 7 个,而在下一个事件之后你有 14 个。尝试在 calculateCustomSummary 摘要开始时修改你的 if 语句:

if (options.summaryProcess === "start") {
    options.totalValue = 0;
    te_arr = [];  
}

如果有效请告诉我。