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