首页 > 解决方案 > devextream 数据网格 数据摘要 计算相同的数据

问题描述

我正在使用 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 已完成,之后它会在事件发生时继续触发。应该如何处理?

标签: javascriptdevextreme

解决方案


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

你定义了数组 let te_arr = []; 超出了 calculateCustomSummary 处理程序的范围,并且只有在满足所有条件时才将 data_state 推送给它。

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

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

请让我知道它是否有效。


推荐阅读