你好,这个问题实际上就是一个对象引用的问题,在JS中,要复制一个对象(包括数组),不能仅仅创建一个引用,而是要深度克隆,您代码里只是把get到的viewrow直接放到dataSource中,这样dataSource的两个位置引用的完全是同一个数据。解决方法参考下方代码:
- var grid = theGrid
- var rowsd = grid.selection.row;
- var viewrow = grid.itemsSource.items[rowsd];
- var view = grid.itemsSource
- // 这里需要克隆一个全新的viewrow
- view.sourceCollection.splice(rowsd+1,0,clone(viewrow));
- view.refresh();
- var col = grid.columns[grid.selection.col];
- grid.setCellData(rowsd+1, col.index, "");
- function clone(Obj){
- var buf;
- if(Obj instanceof Array){
- buf=[];
- var i=Obj.length;
- while(i--){
- buf[i]=clone(Obj[i]);
- }
- return buf;
- }
- else if(Obj instanceof Object){
- buf={};
- for(var k in Obj){
- buf[k]=clone(Obj[k]);
- }
- return buf;
- }else{
- return Obj;
- }
- }
复制代码 |