处理数据表,一切似乎都很棒。我正在使用rowGroup,效果很好,并向我正确显示了分组。还使用startRender查找和显示组虎牙计算。
我的问题是分页会影响我的计算;如果显示长度设置为10,并且一个组有17行,则在开始渲染计算中将给出第一页中前10行的计算结果,下一页中剩余的7条计算结果。
1)我想无论页面如何进行计算,都需要在该组下的所有17行中进行计算
2)或者我需要根据组调整页面。即第1页的第1组,第2页的第2组,依此类推。
var data_table = $('#myTable').DataTable( {
order: [[0, 'asc'], [1, 'asc']],
"displayLength": 25,
rowGroup:{
dataSrc: [0, 1],
startRender: function ( rows, group ) {
var clickTotal = rows
.data()
.pluck(3)
.reduce( function (a, b) {
return parseInt(a) + parseInt(b);
});
var ageCTR = rows
.data()
.pluck(5)
.reduce( function (a, b) {
return parseInt(a) + parseInt(b);
});
return $('<tr>')
.append( '<td>'+group+'</td>' )
.append( '<td>'+clickTotal+'</td>' )
.append( '<td>'+ageCTR +'</td></tr>' );
}
},
columnDefs: [ {
targets: [ 0, 1,5 ],
visible: false
},
{ orderable: false, targets: [2,3,4] } ],
} );
在研究了Datatable功能很长时间之后,找到了解决我的问题的方法。
startRender和endRender中的rows参数仅覆盖当前页面上显示的那些行。要计算所有行,我们将需要使用filter()来基于组过滤表并计算总和。这是我更新的代码。希望有人会有所帮助。
[因为我基于第0列和第1列使用了多级分组,所以这两列都与过滤器函数中的组值进行了比较。]
var clickTotal = $('#myTable').DataTable()
.rows()
.data()
.filter( function ( data, index ) {
return (data[0] == group || data[1] == group) ? true : false;
} )
.pluck(5)
.sum();