data分页grid设置多选,默认的切换分码之前页选择的数据不会被记住,如果要记住之前页选择的数据,参考如下实现
1.定义一个data记录选择的数据(本例data的xid是memory),指定义了一个主键字段如下:
<div component="$UI/system/components/justep/data/data" autoLoad="true" xid="memory" idColumn="fID" confirmDelete="false" onBeforeNew="memoryBeforeNew"> <column name="fID" type="String" xid="xid1"/> </div>
2.在model的构造函数中定一个实例变量(this.checkRowid)用来存储grid当前操作选中行的id
var Model = function(){ this.callParent(); this.checkRowid = ""; };
3.在grid的onRowChecked事件中判断选择状态向memory这data中插入或者删除数据
Model.prototype.mainGridRowChecked = function(event){ var memeryData = this.comp("memory"); this.checkRowid = event.rowID;//选择行的ID //判断如果是选中数据就向memory这个data中插入一条数据把选择行的ID赋值给主键值 //如果是取消选中就把memory这个data中主键值为选择行的ID的记录删除 if(event.checked == true){ memeryData.newData({ defaultValues : [ { "fID" : this.checkRowid } ] }) }else{ memeryData.deleteData(memeryData.getRowByID(this.checkRowid)); } };
4.data分页切换页码时会触发data的refresh相关的事件,可以在onAfterRefresh事件中判断memory中是否有当前页中的数据
Model.prototype.mainDataAfterRefresh = function(event){ var data = event.source; var memeryData = this.comp("memory"); var grid = this.comp("mainGrid"); //遍历memory这个data中的数据获取主键值并放到memeryIDs数组中 var memeryIDs = []; memeryData.each(function(param) { memeryIDs.push(param.row.getID()); }); //遍历grid绑定的data获取rowid,判断在memeryIDs数组中是否存在 //如果存在就调用grid上的setRowChecked方法设置行选中状态 data.each(function(param) { var rowid = param.row.getID() var index = $.inArray(rowid,memeryIDs); if(index >=0){ grid.setRowChecked(rowid,true); } }); };
5.在memory的onBeforeNew中判断已经存在的数据不再插入
Model.prototype.memoryBeforeNew = function(event){ //判断要插入的数据在data中是否存在如果存在就中断当前new动作 var data = event.source; var memeryIDs = []; data.each(function(param) { memeryIDs.push(param.row.getID()); }); var index = $.inArray(this.checkRowid,memeryIDs); if(index >=0){ event.cancel = true; } };
需要注意最终获取grid多选的数据时从memory中获取,这个data中只是记录了选择行的rowid,如果还要获取其他关系的值,在memory中再添加关系,newData的值同时给其他关系赋值
获取选择的数据,如下:
Model.prototype.button1Click = function(event){ var fCheckDatas = []; this.comp('memory').each(function(param) { fCheckDatas.push(param.row.val("fID")); }) alert("选中项:" + fCheckDatas.toString()); };
评一波