Javascript devextream数据网格数据摘要统计相同的数据
我正在使用DevExtreme,希望使用summary函数。 如果同一列中有相同的数据,则对其进行计数Javascript devextream数据网格数据摘要统计相同的数据,javascript,devextreme,Javascript,Devextreme,我正在使用DevExtreme,希望使用summary函数。 如果同一列中有相同的数据,则对其进行计数 let te_arr = []; dxDataGrid({ .................. columns: [ { dataField: "columnsTest", caption: "columnsTest"} ], summary: { recalcu
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++;}}如果存在相应的值,则会立即添加该值,因此不会出现错误,并且会导出正常值。