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());
};
评一波