- 注册时间
- 2013-4-28
- 最后登录
- 2015-8-13
- 阅读权限
- 10
- 积分
- 739
- 精华
- 0
- 帖子
- 50
|
本帖最后由 x-strong 于 2013-10-11 12:26 编辑
比如这里,要把上面的datagrid中选中的记录添加到下面的datagrid中,不允许重复,可通过js来处理,过滤掉下面datagrid中已有的记录,思路就是每次进行添加时,获取上面datagrid选中的记录集(对象数组)与下面的datagrid的数据记录集(对象数组)的差集即可——自定义一个获取数组差的方法——Array.prototype.diff,实现如下:
- Array.prototype.diff = function (a, fun)
- {
- if (a.length < 1)
- {
- return this;
- }
- var t = [];
- var s = this;
- for (var i = 0; i < s.length; i++)
- {
- var c = 0;
- for (var j = 0; j < a.length; j++)
- {
- if (fun(s[i], a[j]))
- {
- c++;
- }
- }
- if (c == j) //和所有的记录都不同时才保留
- {
- t.push(s[i]);
- }
- }
- return t;
- };
复制代码 添加方法中做如下处理:- var selected = xxx.grid.src.getSelecteds();//获取上面的datagrid的选中记录集(对象数组)
- if (!selected) { return false; }
- xxx.add.grid.src.deselectAll(false);
- xxx.add.grid.src.clearSelect(false);
- xxx.add.grid.src.removeRows(selected, false);//这里是删除添加过的
- var adding = selected.diff(xxx .add.grid.temp.data,function (a, b) {return a.id != b.id; });
- xxx .add.grid.temp.addRows(adding, 1);
- xxx .add.grid.temp.accept();
复制代码
示例:- var arr1=[{id:1,name:'abc'},{id:2,name:'dgfdaf'},{id:3,name:'dfadfdf'}];
- var arr2 = [{id:1,name:'abc'},{id:4,name:'rwtrtewrt'},{id:6,name:'bfgfgjlbm'}];
- var diff = arr1.diff(arr2,function(a,b){
- return a.id!=b.id;
- });
- console.log(diff);
复制代码
你试试看吧~~
|
|