grid 选中行做计算
本帖最后由 康肉肉. 于 2024-7-25 18:30 编辑诉求:初始加载,合计显示整列数据和,选中数据时,按照选中数据做合计计算
本帖最后由 Richard.Ma 于 2024-7-26 18:03 编辑
可以给尾部固定行添加为一个普通行而不是合计行,然后自己设置值就行,
参考这个demo中,
https://demo.grapecity.com.cn/wijmo/demos/Grid/Aggregation/Belowthedata/purejs
比如给第三列设置
theGrid.columnFooters.rows.push(new wjGrid.Row());
theGrid.columnFooters.setCellData(0, 3, 'AAAA');
你现在要显示的是选中的一个区域的合计值,那就自己去计算这个区域的合计值,然后显示
那么就用selectionChanged事件,在里面去计算,下面的给出的代码是显示了区域,改写这个,通过区域自己计算合计值。然后再显示就行
selectionChanged: function (s, e) {
var sel=theGrid.selection;
theGrid.columnFooters.setCellData(0, 3, sel.row+"-"+sel.row2+"-"+sel.col+"-"+sel.col2);
}
Richard.Ma 发表于 2024-7-26 15:08
可以给尾部固定行添加为一个普通行而不是合计行,然后自己设置值就行,
参考这个demo中,
这个demo链接可以给一下吗 康肉肉. 发表于 2024-7-26 15:48
这个demo链接可以给一下吗
有个问题,如果列是可以拖拽的,怎么去找 sel.row+"-"+sel.row2+"-"+sel.col+"-"+sel.col2 这几个参数也不好定位 你的需求是“选中区域”发生变化后,去统计选中区域的值。所以始终是在selectionChanged事件里来获取选中区域的。为什么不好定位呢?
我没明白和你说的“列是可以拖拽”有什么关系。
以下几个疑惑:
1、选中区域选中其中1列或者多列,怎么定位我要合计的那一列数据去合计
2、set值的时候,我怎么去set那一列,因为合计列有多列合计
辛苦了,谢谢 1.通过selection属性拿到的就是你选中的区域,你自己可以通过拿到的selection的行列index来判断,如果选中的是整列 那么行index就是-1
2.如果你指的是要set选中的那一列的列脚,那么上述的selection属性中的col自然就是你要set的列index了 本帖最后由 康肉肉. 于 2024-7-31 18:03 编辑
用的贴子回复方法selectionChanged,进行选中合计计算,页面显示选中6个单元格,实际打印只有鼠标划过的4条数据,如图展示
ctl.selectionChanged.addHandler((s, e) => {
console.log(this.flex.selection,'selection/////////')
let item = s.rows[e.row].dataItem;
let c = s.columns[e.col];
console.log(c,'*******');
if(c.aggregate === 1){
if(this.sumObj[c.header]){
this.sumObj[c.header] += Number(item[c.binding]);
}else{
this.sumObj[c.header] = Number(item[c.binding]);
}
}
this.$emit('sumChange',this.sumObj)
});
你用的是selectionChanged事件,那么肯定是选中区域发生变化的时候就会触发一次,这个四条记录是触发了四次,和单元格数量没有任何关系
单元格区域是根据selection获取到的选中区域信息,你自己来算合计值的。可以通过getCellData循环获取单元格值,加起来就是你要的结果
selectionChanged: function (s, e) {
var sel = theGrid.selection;
console.log(sel);
var sum=0;
for (var r = Math.min(sel.row,sel.row2); r <= Math.max(sel.row,sel.row2); r++) {
for (var c = Math.min(sel.col,sel.col2); c <= Math.max(sel.col,sel.col2); c++) {
var v=theGrid.getCellData(r,c,false);
if(typeof v === 'number'){
sum+=v;
}
}
}
theGrid.columnFooters.setCellData(0, 3, sum);
}
页:
[1]