Clark.Pan 发表于 2022-7-31 23:54:44

checkBoxList如何记录更改之前的数据(OldValue)

需求:
需要获取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


页: [1]
查看完整版本: checkBoxList如何记录更改之前的数据(OldValue)