mtkj 发表于 2020-4-29 11:49:42

右键辅助行新增后 setcelldate 导致原始行数据也被清空

本帖最后由 mtkj 于 2020-4-29 12:21 编辑

附件的JS已经上传

KevinChen 发表于 2020-4-29 15:17:56

你好,这个问题实际上就是一个对象引用的问题,在JS中,要复制一个对象(包括数组),不能仅仅创建一个引用,而是要深度克隆,您代码里只是把get到的viewrow直接放到dataSource中,这样dataSource的两个位置引用的完全是同一个数据。解决方法参考下方代码:

var grid = theGrid
var rowsd = grid.selection.row;
var viewrow = grid.itemsSource.items;
var view = grid.itemsSource
// 这里需要克隆一个全新的viewrow
view.sourceCollection.splice(rowsd+1,0,clone(viewrow));
view.refresh();
var col = grid.columns;
grid.setCellData(rowsd+1, col.index, "");

function clone(Obj){
        var buf;
        if(Obj instanceof Array){
                buf=[];
                var i=Obj.length;
                while(i--){
                        buf=clone(Obj);
                }
                return buf;
        }
        else if(Obj instanceof Object){
                buf={};
                for(var k in Obj){
                        buf=clone(Obj);
                }
                return buf;
        }else{
                return Obj;
        }
}
页: [1]
查看完整版本: 右键辅助行新增后 setcelldate 导致原始行数据也被清空