康肉肉. 发表于 2024-7-25 18:14:57

grid 选中行做计算

本帖最后由 康肉肉. 于 2024-7-25 18:30 编辑

诉求:初始加载,合计显示整列数据和,选中数据时,按照选中数据做合计计算

Richard.Ma 发表于 2024-7-26 15:08:23

本帖最后由 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);
      }

康肉肉. 发表于 2024-7-26 15:48:52

Richard.Ma 发表于 2024-7-26 15:08
可以给尾部固定行添加为一个普通行而不是合计行,然后自己设置值就行,

参考这个demo中,


这个demo链接可以给一下吗

康肉肉. 发表于 2024-7-26 16:20:36

康肉肉. 发表于 2024-7-26 15:48
这个demo链接可以给一下吗

有个问题,如果列是可以拖拽的,怎么去找 sel.row+"-"+sel.row2+"-"+sel.col+"-"+sel.col2 这几个参数也不好定位

Richard.Ma 发表于 2024-7-26 18:06:14

你的需求是“选中区域”发生变化后,去统计选中区域的值。所以始终是在selectionChanged事件里来获取选中区域的。为什么不好定位呢?

我没明白和你说的“列是可以拖拽”有什么关系。

康肉肉. 发表于 2024-7-26 18:32:53


以下几个疑惑:
1、选中区域选中其中1列或者多列,怎么定位我要合计的那一列数据去合计
2、set值的时候,我怎么去set那一列,因为合计列有多列合计

辛苦了,谢谢

Richard.Ma 发表于 2024-7-29 00:54:18

1.通过selection属性拿到的就是你选中的区域,你自己可以通过拿到的selection的行列index来判断,如果选中的是整列 那么行index就是-1

2.如果你指的是要set选中的那一列的列脚,那么上述的selection属性中的col自然就是你要set的列index了

康肉肉. 发表于 2024-7-31 18:00:58

本帖最后由 康肉肉. 于 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)
      });

Richard.Ma 发表于 2024-8-1 13:56:29

你用的是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]
查看完整版本: grid 选中行做计算