//关于ext中使用 Ext.grid.CheckboxSelectionModel作为选择框如何保存选中记录的解决方法。
//开发中jsp中用Ext.grid.CheckboxSelectionModel(以下简称sm)遇到以下问题,
//勾选后刷新或者跨页后返回勾选消失,并且只能对当前页的数据进行操作。
//解决方法如下:
var collections=[];//勾选记录和向后台传值的的集合。
var ccjzjl=[];//初次加载用以记录是否被首次加载过的,因为该项目中之前已经选过的记录首次加载时候应该自动加载上
//设置Ext.data.DirectStore
// 数据访问
var store = new Ext.data.DirectStore({
//具体设置省略
});
//设置sm
var sm = new Ext.grid.CheckboxSelectionModel({
singleSelect:false,//允许多选
listeners:{//监听事件当选中时候把记录放进集合,取消选中时候取出集合
rowselect:function(g,rowIndex,e){
var row=grid.getStore().getAt(rowIndex);
var kprxx=row.get('gzbm')+','+row.get('djbm');
if(collections.indexOf(kprxx)==-1){//没有才会添加,有才会取出
collections.push(kprxx);
}
},
rowdeselect:function(g,rowIndex,e){
var row=grid.getStore().getAt(rowIndex);
var kprxx=row.get('gzbm')+','+row.get('djbm');
if(collections.indexOf(kprxx)!=-1){
collections.remove(kprxx);
}
}
}
});
//设置列
var columns = [sm, {//sm作为一列
"id" : "gzbm",
"dataIndex" : "gzbm",
"header" : "工种编码",
"sortable" : false,
"anchor":"100%",
width : 120
}, {
"id" : "gzmc",
"dataIndex" : "gzmc",
"header" : "工种名称",
"sortable" : false,
width : 120
}, {
"id" : "djbm",
"dataIndex" : "djbm",
"header" : "等级编码",
"sortable" : false,
width : 120
}, {
"id" : "djmc",
"dataIndex" : "djmc",
"header" : "考核等级",
"sortable" : false,
width : 120
}];
//设置store加载时的监听事件
store.on('load', function(t,records,o){
if(records.length>0){
for(var i=0;i<records.length;i++){
var kprxx=records[i].get("gzbm")+','+records[i].get("djbm");
if(records[i].get("sz")==1&&ccjzjl.indexOf(kprxx)==-1){
ccjzjl.push(kprxx);//如果此条记录中sz为1为应初次加载,初次加载则放进初次加载集合
//再次刷新等操作后便不会再加载,保证了应该初次加载的会自动加载一次
collections.push(kprxx);
}
}
}
//加载的时候,根据临时变勾选
var total = store.getCount();//数据行数
for(var i=0;i<total;i++){
var a=i+1;
var row=store.getAt(i);
var kprxx=row.get("gzbm")+','+row.get("djbm");
if(collections.indexOf(kprxx)!=-1){ //collections集合里有的会自动加载
grid.getSelectionModel().selectRow(i,true);
}
}
});
//设置Ext.grid.GridPanel
var grid = new Ext.grid.GridPanel({
//其他设置省略
sm : sm,//sm这里又作为grid的部分
columns : columns,
store : store,
});
//设置后台传值
for(var i=0;i<collections.length;i++){//从collections中取出
var xx=[];
xx=collections[i].split(",");
if(i==0){
gzbm=xx[0];
djbm=xx[1];
}else{
gzbm=gzbm+","+xx[0];
djbm=djbm+","+xx[1];
}
}
//这样选择框就变得有记忆功能了。
//开发中jsp中用Ext.grid.CheckboxSelectionModel(以下简称sm)遇到以下问题,
//勾选后刷新或者跨页后返回勾选消失,并且只能对当前页的数据进行操作。
//解决方法如下:
var collections=[];//勾选记录和向后台传值的的集合。
var ccjzjl=[];//初次加载用以记录是否被首次加载过的,因为该项目中之前已经选过的记录首次加载时候应该自动加载上
//设置Ext.data.DirectStore
// 数据访问
var store = new Ext.data.DirectStore({
//具体设置省略
});
//设置sm
var sm = new Ext.grid.CheckboxSelectionModel({
singleSelect:false,//允许多选
listeners:{//监听事件当选中时候把记录放进集合,取消选中时候取出集合
rowselect:function(g,rowIndex,e){
var row=grid.getStore().getAt(rowIndex);
var kprxx=row.get('gzbm')+','+row.get('djbm');
if(collections.indexOf(kprxx)==-1){//没有才会添加,有才会取出
collections.push(kprxx);
}
},
rowdeselect:function(g,rowIndex,e){
var row=grid.getStore().getAt(rowIndex);
var kprxx=row.get('gzbm')+','+row.get('djbm');
if(collections.indexOf(kprxx)!=-1){
collections.remove(kprxx);
}
}
}
});
//设置列
var columns = [sm, {//sm作为一列
"id" : "gzbm",
"dataIndex" : "gzbm",
"header" : "工种编码",
"sortable" : false,
"anchor":"100%",
width : 120
}, {
"id" : "gzmc",
"dataIndex" : "gzmc",
"header" : "工种名称",
"sortable" : false,
width : 120
}, {
"id" : "djbm",
"dataIndex" : "djbm",
"header" : "等级编码",
"sortable" : false,
width : 120
}, {
"id" : "djmc",
"dataIndex" : "djmc",
"header" : "考核等级",
"sortable" : false,
width : 120
}];
//设置store加载时的监听事件
store.on('load', function(t,records,o){
if(records.length>0){
for(var i=0;i<records.length;i++){
var kprxx=records[i].get("gzbm")+','+records[i].get("djbm");
if(records[i].get("sz")==1&&ccjzjl.indexOf(kprxx)==-1){
ccjzjl.push(kprxx);//如果此条记录中sz为1为应初次加载,初次加载则放进初次加载集合
//再次刷新等操作后便不会再加载,保证了应该初次加载的会自动加载一次
collections.push(kprxx);
}
}
}
//加载的时候,根据临时变勾选
var total = store.getCount();//数据行数
for(var i=0;i<total;i++){
var a=i+1;
var row=store.getAt(i);
var kprxx=row.get("gzbm")+','+row.get("djbm");
if(collections.indexOf(kprxx)!=-1){ //collections集合里有的会自动加载
grid.getSelectionModel().selectRow(i,true);
}
}
});
//设置Ext.grid.GridPanel
var grid = new Ext.grid.GridPanel({
//其他设置省略
sm : sm,//sm这里又作为grid的部分
columns : columns,
store : store,
});
//设置后台传值
for(var i=0;i<collections.length;i++){//从collections中取出
var xx=[];
xx=collections[i].split(",");
if(i==0){
gzbm=xx[0];
djbm=xx[1];
}else{
gzbm=gzbm+","+xx[0];
djbm=djbm+","+xx[1];
}
}
//这样选择框就变得有记忆功能了。