Javascript devextream数据网格数据摘要统计相同的数据

Javascript devextream数据网格数据摘要统计相同的数据,javascript,devextreme,Javascript,Devextreme,我正在使用DevExtreme,希望使用summary函数。 如果同一列中有相同的数据,则对其进行计数 let te_arr = []; dxDataGrid({ .................. columns: [ { dataField: "columnsTest", caption: "columnsTest"} ], summary: { recalcu

我正在使用DevExtreme,希望使用summary函数。 如果同一列中有相同的数据,则对其进行计数

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处理程序的作用域,并且只有在满足所有条件的情况下才将数据_状态推送到它

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

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

请让我知道它是否有效。

如果您想将一列的总计数作为摘要,您所采用的方法是正确的。同样的数据也应该计算在内。这个问题很久以前就解决了。如下所示,如果options.summaryProcess===calculate{//count++ifoptions.value.PH_PayConfirm=='Y'{options.totalValue++;}}如果存在相应的值,则会立即添加该值,因此不会出现错误,并且会导出正常值。