找回密码
 立即注册

QQ登录

只需一步,快速开始

康肉肉.

注册会员

7

主题

16

帖子

79

积分

注册会员

积分
79
康肉肉.
注册会员   /  发表于:2024-7-25 18:14  /   查看:555  /  回复:8
1金币
本帖最后由 康肉肉. 于 2024-7-25 18:30 编辑

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

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

8 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于: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

比如给第三列设置
  1.     theGrid.columnFooters.rows.push(new wjGrid.Row());
  2.     theGrid.columnFooters.setCellData(0, 3, 'AAAA');
复制代码



你现在要显示的是选中的一个区域的合计值,那就自己去计算这个区域的合计值,然后显示
那么就用selectionChanged事件,在里面去计算,下面的给出的代码是显示了区域,改写这个,通过区域自己计算合计值。然后再显示就行

  1.         selectionChanged: function (s, e) {
  2.             
  3.             var sel=theGrid.selection;
  4.             theGrid.columnFooters.setCellData(0, 3, sel.row+"-"+sel.row2+"-"+sel.col+"-"+sel.col2);
  5.         }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
康肉肉.
注册会员   /  发表于: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讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-7-26 18:06:14
5#
你的需求是“选中区域”发生变化后,去统计选中区域的值。所以始终是在selectionChanged事件里来获取选中区域的。为什么不好定位呢?

我没明白和你说的“列是可以拖拽”有什么关系。
回复 使用道具 举报
康肉肉.
注册会员   /  发表于:2024-7-26 18:32:53
6#

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

辛苦了,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-7-29 00:54:18
7#
1.通过selection属性拿到的就是你选中的区域,你自己可以通过拿到的selection的行列index来判断,如果选中的是整列 那么行index就是-1

2.如果你指的是要set选中的那一列的列脚,那么上述的selection属性中的col自然就是你要set的列index了
回复 使用道具 举报
康肉肉.
注册会员   /  发表于:2024-7-31 18:00:58
8#
本帖最后由 康肉肉. 于 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)
      });

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-8-1 13:56:29
9#
你用的是selectionChanged事件,那么肯定是选中区域发生变化的时候就会触发一次,这个四条记录是触发了四次,和单元格数量没有任何关系

单元格区域是根据selection获取到的选中区域信息,你自己来算合计值的。可以通过getCellData循环获取单元格值,加起来就是你要的结果



  1.         selectionChanged: function (s, e) {
  2.             var sel = theGrid.selection;
  3.             console.log(sel);
  4.             var sum=0;
  5.             for (var r = Math.min(sel.row,sel.row2); r <= Math.max(sel.row,sel.row2); r++) {
  6.                 for (var c = Math.min(sel.col,sel.col2); c <= Math.max(sel.col,sel.col2); c++) {
  7.                     var v=theGrid.getCellData(r,c,false);
  8.                     if(typeof v === 'number'){
  9.                         sum+=v;
  10.                     }
  11.                 }
  12.             }
  13.             theGrid.columnFooters.setCellData(0, 3, sum);
  14.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部