ExtJs 3中Grid(CheckboxSelectionModel模式)翻页选择记录???

1988_1989 2011-12-04 04:25:49
ExtJs 3中Grid(CheckboxSelectionModel模式):
例如
选择第一页的记录之后, 翻页到第二页,再选择,然后仍返回第一页,之前选择的记录仍是被选中状态


大神们,帮帮忙,,,,一星期了,没有成功
...全文
325 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
凡人之玲珑 2011-12-07
先定义一个变量selectValues1 用来接收要选中的行的主键列的id 用“,”隔开 现在做法是在选中或者取消行的时候对selectValues1 进行对应操作 如果是选中就判读selectValues1 是否有当前行的id如果有就不管没有就加进去 取消就删除selectValues1 中的信息
然后在store加载完成之后进行事件监听操作 这个方法已经给你写了
现在 还要加一个 行点击事件 不好意思 忘记了 怎么判断行复选框怎么选中了 。。 你找下、、一下是store加载完执行的代码 (你可以给selectValues1 一个默认值试试。修改下列的名称我这里是MODELID)

//保存要选中的信息
var selectValues1 = "506922";

var url = jsContextPath+'/command/commandDqmp.do?opCommand=dis_findDispatcher';
var store = new Ext.data.JsonStore({
url:url,
root:'data',
totalProperty:"totalProperty",
fields:fields,
pruneModifieRecords:true, //store每次提交后自动清除modified标记
listeners:{
load:function(){
try{

//加载完执行的信息
var data1 = Ext.getCmp("grid").getStore().data;

//遍历当前store的信息
for(var a=0; a<data1.length; a++){

//获得当前行
var record1 = Ext.getCmp("grid").getStore().getAt(a);

//获得主键id 判断是否需要选中
var id = record1.get("MODELID");

var flag = false;
if(selectValues1.length>0){
var array = selectValues1.split(",");
for(var r=0; r<array.length; r++){
var everySelectId = array[r];
if(id == everySelectId){
//可以需要选中
flag = true;
break;
}
}
}

//为true说明是需要选中的
if(flag){
Ext.getCmp("grid").getSelectionModel().selectRow(a,true);
}
}
}catch(e){
Ext.Msg.alert("异常","异常:"+e.description)
}
}
}
});
回复
1988_1989 2011-12-07
[Quote=引用 9 楼 linglongzhixin 的回复:]

顶 弄错了。 哈哈哈你可以在 选择之后 用一个隐藏域变量接收选中的行的某一列id 然后在store加载完之后遍历store的data 分别判断是否需要选中即可(判断id相等)即可
[/Quote]


var store = new Ext.data.JsonReader({
root:'data',
totalProperty:'count',
id: 'caPk'
}, this.Record)
// 创建数据源
this.ds = new Ext.data.Store({
proxy:this.dataProxy,
pruneModifiedRecords : true,
autoLoad:false,
listeners:{
datachanged:clearAllSelectedcheckBox,
load:function(){

alert("选中的IDs:"+exportIds);//这个exportId是选择的那些记录的id的数组;

var records = new Array();
for(var i=0;i<store.jsonData.data.length;i++){
if (exportIds.contains(store.jsonData.data[i].caPk)){
/**将json数据转换为Record*/
var obj = store.jsonData.data[i];
var Record = store.recordType;
var r = new Record(obj);

records.push(r);
}
}
alert("已选中的条数:"+records.length); //这个显示是正确的,
selModel.selectRecords(records, true);// 以后每次load数据时,都会默认选中
alert(selModel.getCount()); //??????????????这个却是 0 ,无法理解???
alert("===");
}
},
reader: store
});

回复
凡人之玲珑 2011-12-06
顶 弄错了。 哈哈哈你可以在 选择之后 用一个隐藏域变量接收选中的行的某一列id 然后在store加载完之后遍历store的data 分别判断是否需要选中即可(判断id相等)即可
回复
凡人之玲珑 2011-12-05
pruneModifiedRecords :true
试下这个看有木有用。。
回复
1988_1989 2011-12-05
自己顶啦
回复
1988_1989 2011-12-05
[Quote=引用 6 楼 linglongzhixin 的回复:]

你加在哪里的 我这边没有这回事,,
[/Quote]

   // 数据源代理
this.dataProxy = new Ext.data.HttpProxy({
url:'cbi/manage/index/list.do'

});

var store = new Ext.data.JsonReader({
root:'data',
totalProperty:'count',
id: 'caPk'
}, this.Record)
// 创建数据源
this.ds = new Ext.data.Store({
proxy:this.dataProxy,
pruneModifiedRecords : true,
autoLoad:false,
listeners:{
datachanged:clearAllSelectedcheckBox,
load:function(){
alert("翻页呢哦");
alert("选择的IDs:"+exportIds);
alert(store);
var records = new Array();
for(var i=0;i<store.jsonData.data.length;i++){
if (exportIds.contains(store.jsonData.data[i].caPk)){
alert(store.jsonData.data[i].caPk);
alert(exportIds.contains(store.jsonData.data[i].caPk));
records.push(store.jsonData.data[i]);
}

}
selModel.selectRecords(records, true);// 以后每次load数据时,都会默认选中
}
},
reader: store
});
回复
凡人之玲珑 2011-12-05
var pageSize = 15;
var sm = new Ext.grid.CheckboxSelectionModel({singleSelect : true});
var items = [
sm,
{
header: "名称",
dataIndex: 'NAME',
hideable:false,
sortable:true,
align:'center',
resizable:true
}
];

var fields = [
{name:'NAME'}
];
var url = jsContextPath+'/command/commandDqmp.do?opCommand=dis_findDispatcher';
var store = new Ext.data.JsonStore({
url:url,
root:'data',
totalProperty:"totalProperty",
fields:fields,
pruneModifieRecords:true //store每次提交后自动清除modified标记
});

var grid = new Ext.grid.GridPanel({
id:'grid',
store:store,
title:'规则调度列表信息',
cm:cm,
sm:sm,
width:winWidth,
height:winHeight,
autoScroll:true,
loadMask:true,
collapsible:true, //自动收缩
listeners:{},
viewConfig:{forceFit:true}, //自动列宽
bbar:new Ext.PagingToolbar({
pageSize:pageSize,
store:store,
displayInfo:true,
displayMsg:'显示第{0}到第{1}条,一共{2}条,每页显示'+pageSize+'条',
emptyMsg : "没有数据"
}),
frame:true,
renderTo:Ext.getBody()
});

store.load({params:{start:0,limit:pageSize}});
回复
凡人之玲珑 2011-12-05
你加在哪里的 我这边没有这回事,,
回复
凡人之玲珑 2011-12-05
哈哈 慢慢 找属性。。
回复
1988_1989 2011-12-05
[Quote=引用 3 楼 linglongzhixin 的回复:]

pruneModifiedRecords :true
试下这个看有木有用。。
[/Quote]

试了,不起作用
回复
和你一起等高手。。。。
回复
发动态
发帖子
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
社区公告
暂无公告