从一个grid1选中的记录在另一个grid2中显示,翻页则把grid1当前页在grid2中含有的记录选中

创建一个Panel1页面,包含left_gridPanel和right_gridPanel。当在left_gridPanel中选中或取消选中记录时,同步更新right_gridPanel中的选中状态。使用Store和ColumnModel定义grid,并监听rowselect和rowdeselect事件以实现选中记录的同步。同时,在left_gridPanel加载数据后,检查right_gridPanel中是否存在相同的记录并进行相应的选中操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、建整个Panel1页面脚本  

           var right_gridPanel = Ext.getCmp(“right_gridPanel”);

          if(right_gridPanel==null){

              /*********************

                        * 设置列表的表头

                        **********************/

                       var cm = new Ext.grid.ColumnModel([

                              new Ext.grid.RowNumberer({header:'序号',width:40}),

                              {

                                id: 'propId',  //属性id字段

                                header: "属性名",

                                dataIndex: 'propName',  //属性名对应字段

                                width: 60

                              }

                       ]);

                         //根据浏览器分辨率计算列表高度与行数

                       var screenHeight=screen.height;

                       var gridPanelHeight=screenHeight-285;

             right_gridPanel = new Ext.grid.GridPanel({

                    id:"right_gridPanel",

                    store:new Ext.data.Store(),  //空grid列表

                    cm:cm,

                    border:false,

                    borderStyle:'border-left:0px;border-bottom:0px;',

                    tbar:[{text:'选中的属性'},{text:'  '},"->",''],

                    height:gridPanelHeight

                 });

          }

             panel1=new Ext.Panel({

                    id:"panel1",

                    width:620,

                    autoScroll:true,

                    layout:'column',

                    items:[{

                      columnWidth:.65,

                        id:"left_panel",

                        autoLoad:left_gridPanel_loader,  //left_gridPanel_loader为定义的载入left_gridPanel列表页面配置

                        autoScroll:false

                    },{

                      columnWidth:.35,

                      id:'right_panel',

                      items:right_gridPanel

                      //height:gridPanelHeight

                    }]

             });

 

2、在left_gridPanel列表页面添加脚本如下

  //定义gridcheckbox选中与反选事件

  var right_gridPanel = "right_gridPanel";

//sm_left_gridPanel.为left_gridPanel的gridPanel的列CheckboxSelectionModel定义对象

  sm_left_gridPanel.on('rowselect', function(sm, rowIdx, r){ //选中

      if(Ext.getCmp(right_gridPanel)){

               var selectedGrid = Ext.getCmp(right_gridPanel);

               var flag=false;

               //由于发现在Store里找对象r老出现问题,新增方法里找不到但是却可以删除掉,执行一样的代码可进到两个方法里却一会儿找得到一会儿找不到。只好采用each方法循环Store中所有的记录来一一判断

               selectedGrid.getStore().data.each(function(d){

                    if(d.data.propId==r.data.propId){

                       flag=true;

                       selectedGrid.getView().refresh(); //刷新列序号

                       return;

                    }

               });

               if(flag){ //已存在则不需要再添加

                  return;

               }else{ //添加

                      selectedGrid.getStore().add(r);

                            selectedGrid.getView().refresh();

               }

      }

  });

  sm_left_gridPanel.on('rowdeselect', function(sm, rowIdx,r){//反选

      if(Ext.getCmp(right_gridPanel)){

             var selectedGrid = Ext.getCmp(right_gridPanel);

             selectedGrid.getStore().data.each(function(d){  

                    if(d.data.propId==r.data.propId){

                         selectedGrid.getStore().remove(d);

                     selectedGrid.getView().refresh();

                       return;

                    }

             });

             return;

      }

  });

//定义grid载入完数据后触发事件

Ext.getCmp("left_gridPanel").store.on("load",function(store,records,options){

     if(Ext.getCmp("right_gridPanel")){

               var selectedGrid = Ext.getCmp("right_gridPanel");

               var checkedRecords = [];

               selectedGrid.getStore().data.each(function(d){

                    for(var i=0;i<records.length;i++){

                       var r=records[i];

                           if(d.data.propId==r.data.propId){

                               checkedRecords.push(r);

                               break;

                           }

                    }

               });

               //在右边grid中已存在的则把左边grid中对应的记录选中

               Ext.getCmp("left_gridPanel").selModel.selectRecords(checkedRecords,true);

      }

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值