找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-7-31 23:54  /   查看:2025  /  回复:0
需求:
需要获取checkboxList更新前后的值,目前在buttonClicked中可以拿到更新后的结果,需要获取更新前的数据。
解决方案:
一.
在buttonClicked事件中通过getDirtyCells方法获取脏数据,脏数据中有oldValue和newValue分别对应修改前与修改后的值,例如下面代码
  1. spread.bind(GC.Spread.Sheets.Events.ButtonClicked, function (e, args) {
  2.   var sheet = args.sheet, row = args.row, col = args.col;
  3.   var cellType = activeSheet.getCellType(row, col);
  4.   if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {
  5.     console.log(sheet.getDirtyCells())
  6.   }
  7. });
复制代码
这样的方式可以实现,但是因为getDirtyCells获取的是整个sheet的脏数据,其中不可能只有checkboxlist的脏数据,所以需要对脏数据进行过滤,找到对应checkboxList中的脏数据。
二.
重写checkboxList,扩展其属性,让其自身记录脏数据。
首先,我们创建一个新的CellType,让其去继承checkboxList,并在其属性中添加一个oldValue属性。
  1. function MyCellType() {
  2.                         this.oldValue;
  3.                 }
  4.                 MyCellType.prototype = new GC.Spread.Sheets.CellTypes.CheckBoxList();
复制代码
接下来,还是监听ButtonClicked事件,利用事件完成oldValue,newValue的捕获,并且完成oldValue与newValue之间的新老值交替工作。
  1. spread.bind(GC.Spread.Sheets.Events.ButtonClicked, function (e, args) {
  2.   var sheet = args.sheet, row = args.row, col = args.col;
  3.   var cellType = sheet.getCellType(row, col);
  4.   if (cellType instanceof MyCellType) {
  5.     var cellType = sheet.getCellType(row,col);
  6.     var newValue = sheet.getValue(row,col);
  7.     console.log("oldValue:"+cellType.oldValue);
  8.     console.log("newValue:"+sheet.getValue(row,col));
  9.     cellType.oldValue = newValue;
  10.   }
  11.                 });
复制代码
最终,我们在使用该cellType去创建checkboxlist,这里注意,在setCellType之后我们需要通过代码给oldValue进行第一次的赋值(之后的赋值将在buttonClicked事件中进行)。
  1. var c = new MyCellType();
  2.                 c.items([{text:"a",value:1},{text:"b",value:2},{text:"c",value:3}]);
  3.                 sheet.setCellType(3, 2, c, GC.Spread.Sheets.SheetArea.viewport);
  4.                 c.oldValue = sheet.getValue(3,2);
复制代码


详情可以查看附件的demo


MyCheckboxList.html

3.53 KB, 下载次数: 60

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部