`
ssxxjjii
  • 浏览: 948678 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扩展GridPanel,附带分页选中状态,实现快速构建一个功能齐全的Grid

    博客分类:
  • EXT
 
阅读更多

使用简单的配置就可以实现 store, columns, selModel , pagingToolbar , 

最重要的一点是实现分页时可以保持前一页的选中状态, 
 但是要遵守其中的一些规定,至于哪些规定呢,看下面的代码就知道啦! 
 代码如下: 
Java代码  收藏代码
  1. /* 
  2.  * @class Ext.ux.grid.CollectGrid 
  3.  * @version: 1.0 
  4.  * @author: chengbao_zhu 
  5.  * 
  6.  * Example : Ext.onReady(function(){     
  7.               var CM_JR_Record = [ 
  8.               { 
  9.                  dataIndex:"", //the ColumnModel options alse the JsonReader mapping (required) 
  10.                  header:"",    //the ColumnModel options (required)  
  11.                  visiable: false, //my expands option to show the header or not (options) 
  12.                  type: date,   //the type of this data (options) 
  13.                  ...another options of ColumnModel 
  14.               },{    
  15.                  dataIndex : '',    
  16.                  header : "",    
  17.                  width : 130    
  18.               }];  
  19.               
  20.               var myGrid = new Ext.ux.grid.CollectGrid({ 
  21.                   url : 'MyJsp.jsp',          // the store load url (required) 
  22.                   CM_JR_Record: CM_JR_Record, //.....(required) 
  23.                   rowNumber:true,             //true to add a Ext.grid.RowNumberer,defalut(true) 
  24.                   checkBox:true,              //true to add a Ext.grid.CheckBoxSelectionModel,default(true) 
  25.                   pagingBar:true,             //true to add a Ext.PagingToolBar,default(true) 
  26.                   pagingConfig:objcet,        //config pagingToolBar if pagingBar is true 
  27.                   keepSelectedOnPaging: true, //true to FireEvent when you paging to keep the state of record selected 
  28.                   recordIds : new Array() ,   // store seleced ids when keepSelectedOnPaging is true 
  29.                   idColName :'stat_id',       //the id column name 
  30.                    
  31.                   ...another 
  32.                   width : 700,  
  33.                   height: 600,  
  34.                    
  35.                   title : 'This is My Grid'  , 
  36.                   renderTo: 'my_grid' 
  37.               }); 
  38.                
  39.               myGrid.store.load({params:{start:0,limit:myGrid.pagingConfig.pageSize}}); 
  40.               //myUxGrid.render(); 
  41.               myGrid.on('rowclick',function(grid,rowIndex,e){ 
  42.                 alert(grid.getStore().getAt(rowIndex).data['stat_id']); 
  43.               } 
  44.               ); 
  45.          } 
  46.          ); 
  47.  */  
  48.   
  49.    
  50. Ext.namespace('Ext.ux.grid');  
  51.   
  52. Ext.ux.grid.CollectGrid = Ext.extend(Ext.grid.GridPanel,{  
  53.       
  54.     /* 
  55.      * true to keep the records selected when you paging 
  56.      * @default(false) 
  57.      * @type: boolean 
  58.      */  
  59.     keepSelectedOnPaging: false,  
  60.       
  61.     /* 
  62.      * the array to store the record id 
  63.      * @type: array 
  64.      */  
  65.     recordIds:new Array(),  
  66.       
  67.     /* 
  68.      * set your id Column Name 
  69.      * @default : this.CM_JR_Record[0].dataIndex 
  70.      */  
  71.     idColName:'',  
  72.       
  73.     /* 
  74.      * set this.store.load url; 
  75.      * @type: string 
  76.      */  
  77.     url: '',  
  78.       
  79.     /* 
  80.      * show the rowNumber or not 
  81.      * @type: boolean 
  82.      * @default: true 
  83.      */  
  84.     rowNumber : true,  
  85.       
  86.     /* 
  87.      * set the grid sm,if checkBoxSelection=true,sm=CheckBoxSelectionModel 
  88.      * else sm=RowSelectionModel,default to true; 
  89.      * @type: boolean 
  90.      */  
  91.     checkBox: true,  
  92.       
  93.     /* 
  94.      * set the grid cm array; 
  95.      * set the JsonReader record; 
  96.      *  
  97.      * format: [{name:'',header:'',visiable:'',...another cm options},{}], 
  98.      * @name=dataIndex 
  99.      * @visiable: set this record to the cm(grid header) default(true) 
  100.      * @type: array (records) 
  101.      */   
  102.     CM_JR_Record: null,  
  103.       
  104.     /* 
  105.      * true to add a bottom paging bar 
  106.      * @defalut: true 
  107.      * @type: boolean 
  108.      */  
  109.     pagingBar: true,  
  110.       
  111.     /* 
  112.      * config paging bar if pagingBar set true 
  113.      * @type: object 
  114.      * @default: {pageSize: 20,store: this.store,displayInfo: true, 
  115.      *            displayMsg: '当前记录数: {0} - {1} 总记录数: {2}', 
  116.      *            emptyMsg: '<b>0</b> 条记录'} 
  117.      */  
  118.     pagingConfig:{  
  119.         pageSize: 20,  
  120.         //store: this.store,  
  121.         displayInfo: true,  
  122.         displayMsg: '当前记录数: {0} - {1} 总记录数: {2}',  
  123.         emptyMsg: '<b>0</b> 条记录'  
  124.     },  
  125.       
  126.     viewConfig:{  
  127.         forceFit: true  
  128.     },  
  129.       
  130.     //private  
  131.     initComponent: function(){  
  132.         if(this.CM_JR_Record){  
  133.             this.init_SM_CM_DS();  
  134.         }  
  135.         if(this.pagingBar){  
  136.             this.init_PagingBar();  
  137.         }  
  138.         if(this.keepSelectedOnPaging){  
  139.             this.init_OnPaging();  
  140.         }  
  141.         Ext.ux.grid.CollectGrid.superclass.initComponent.call(this);  
  142.     },  
  143.       
  144.     /* 
  145.      * init the grid use the config options 
  146.      * @return: void 
  147.      * @params: none 
  148.      */  
  149.     init_SM_CM_DS: function(){  
  150.         var gCm = new Array();  
  151.         var gRecord = new Array();  
  152.           
  153.         if(this.rowNumber){  
  154.             gCm[gCm.length]=new Ext.grid.RowNumberer();  
  155.         }  
  156.         if(this.checkBox){  
  157.             var sm = new Ext.grid.CheckboxSelectionModel();  
  158.             gCm[gCm.length] = sm;  
  159.             this.selModel = sm;  
  160.         }  
  161.           
  162.         for(var i=0;i<this.CM_JR_Record.length;i++)  
  163.         {  
  164.             var g = this.CM_JR_Record[i];  
  165.             if(g.visiable || g.visiable=='undefined' || g.visiable==null){  
  166.                 gCm[gCm.length] = g;  
  167.             }  
  168.               
  169.             gRecord[gRecord.length]={  
  170.                 name: g.dataIndex,  
  171.                 type: g.type || 'string'   
  172.             }  
  173.         }  
  174.       
  175.         //create grid columnModel  
  176.         this.cm = new Ext.grid.ColumnModel(gCm);  
  177.         this.cm.defaultSortable = true;  
  178.           
  179.         //create a jsonStore  
  180.         this.store = new Ext.data.Store({  
  181.           
  182.             proxy: new Ext.data.HttpProxy({  
  183.                 url: this.url,  
  184.                 method: 'post'  
  185.             }),  
  186.             reader:new Ext.data.JsonReader({  
  187.                 totalProperty: 'totalProperty',  
  188.                 root: 'root'  
  189.             },  
  190.             Ext.data.Record.create(gRecord)  
  191.             )  
  192.           
  193.         });  
  194.           
  195.           
  196.         this.pagingConfig.store = this.store;  
  197.           
  198.         if(this.pagingBar){  
  199.             this.store.load({params:{start:0,limit:this.pagingConfig.pageSize}});  
  200.         }else{  
  201.             this.store.load();  
  202.         }  
  203.           
  204.     },  
  205.       
  206.     /* 
  207.      * 创建并初始化paging bar 
  208.      */  
  209.     init_PagingBar: function(){  
  210.         var bbar = new Ext.PagingToolbar(this.pagingConfig);  
  211.         this.bbar = bbar;  
  212.     },  
  213.       
  214.     init_OnPaging: function(){  
  215.           
  216.         this.idColName = this.CM_JR_Record[0].dataIndex ;//默认第一列为ID列  
  217.           
  218.         this.selModel.on('rowdeselect',function(selMdl,rowIndex,rec ){  
  219.           
  220.               
  221.                 for(var i=0;i<this.recordIds.length;i++)  
  222.                 {  
  223.                     if(rec.data[this.idColName] == this.recordIds[i]){  
  224.                         this.recordIds.splice(i,1);                       
  225.                         return;  
  226.                     }  
  227.                 }  
  228.               
  229.                
  230.        },this);  
  231.          
  232.        this.selModel.on('rowselect',function(selMdl,rowIndex,rec){  
  233.             if(this.hasElement(this.recordIds)){  
  234.                 for(var i=0;i<this.recordIds.length;i++){  
  235.                     if(rec.data[this.idColName] == this.recordIds[i]){  
  236.                         return;  
  237.                     }  
  238.                 }  
  239.             }     
  240.               
  241.             this.recordIds.unshift(rec.data[this.idColName]);  
  242.               
  243.        },this);  
  244.          
  245.        this.store.on('load',function(st,recs){  
  246.             if(this.hasElement(this.recordIds)){  
  247.                 st.each(function(rec){  
  248.                     Ext.each(this.recordIds,function(item,index,allItems){  
  249.                         if(rec.data[this.idColName] == item){  
  250.                             this.selModel.selectRecords([rec],true);                          
  251.                             return false;  
  252.                         }  
  253.                     },this);  
  254.                 },this);      
  255.             }     
  256.        },this);  
  257.                
  258.     },  
  259.       
  260.     hasElement : function(recIds){  
  261.         if(recIds.length > 0)  
  262.             return true;  
  263.         else  
  264.             return false;  
  265.     }  
  266.       
  267. }  
  268. )  

分享到:
评论

相关推荐

    Python 查看主机IP及mac地址

    Python 查看主机IP及mac地址

    1-全球各国信息化发展指数IDI指数2007-2017年-社科数据.zip

    全球各国信息化发展指数(IDI指数)是一个衡量国家和地区信息与通信技术发展水平的综合评价指标,由国际电信联盟定期发布。该指数通过三个分指数来评估:ICT接入分指数、ICT使用分指数和ICT技能分指数。ICT接入分指数涵盖了固定电话普及率、移动电话普及率、人均国际出口带宽、电脑家庭普及率和互联网家庭普及率等指标;ICT使用分指数则包括网民普及率、固定宽带人口普及率和移动宽带人口普及率;ICT技能分指数则关注平均受教育年限、中等教育毛入学率和高等教育毛入学率。这些指标共同描绘了一个国家在信息化基础设施、信息化使用、知识水平等方面的发展情况。数据覆盖了2007至2017年的区间,但需要注意的是,2009年的数据在报告中是缺失的。IDI指数为全球、区域、国家或地区信息化发展程度提供了一个综合评价手段,对于研究和比较不同国家和地区的信息化发展水平具有重要意义。

    ASP+ACCESS基于WEB网上留言板(源代码+论文)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    生产现场工艺文件执行检查管理流程说明.docx

    生产现场工艺文件执行检查管理流程说明.docx

    1-全国各省人口密度数据2000-2021年-社科数据.zip

    全国各省人口密度数据2000-2021年的社科数据内容涵盖了中国31个省、直辖市、自治区的人口分布情况。这些数据通过计算年末常住总人口与地区土地面积的比值来得出人口密度,即单位土地面积上的人口数量,通常以人/平方千米为单位。数据集包含了地区、年份、年末常住总人口(万人)、面积(平方千米)以及计算得出的人口密度(人/平方千米)等关键指标。这些数据不仅反映了人口分布的地理特征,还揭示了人口增长与土地利用之间的关系,对于城市规划、资源管理、环境政策制定等领域具有重要的参考价值。通过分析这些数据,研究者可以深入了解人口变化趋势,评估不同地区的人口承载能力,并为相关政策提供数据支持。

    基于PCIe接口的深度学习项目实例的详细介绍3.docx

    基于PCIe接口的深度学习项目实例的详细介绍3

    1-全国各地级市空气质量指数AQI、AQI排名、PM2.5大气污染日度数据2013-2022年-社科数据.zip

    本数据集提供了2013至2022年间全国328个地级市的空气质量指数(AQI)和PM2.5等大气污染日度数据。数据涵盖了AQI、PM2.5、PM10、CO、SO2、NO2、O3等关键指标,为研究空气质量变化和污染趋势提供了丰富的信息。这些数据不仅包括了空气质量的定量描述,还涉及了空气污染对健康的影响,是评估空气质量的重要工具。数据来源权威,更新至2022年,为科研、政策制定和公众了解提供了宝贵的参考。

    NCRE全国计算机等级考试三级数据库技术(填空题)

    全国计算机等级考试(National Computer Rank Examination,简称NCRE),是经原国家教育委员会(现教育部)批准,由教育部教育考试院(原教育部考试中心)主办,面向社会,用于考查应试人员计算机应用知识与技能的全国性计算机水平考试体系。NCRE开考之后,受到社会广泛关注和认可,为我国信息化技术人才的培养做出了重要贡献。 三级:工程师预备级。三级证书考核面向应用、面向职业的岗位专业技能。 报名条件:报名者不受年龄、职业、学历等限制,均可根据自己学习情况和实际能力选考相应的级别和科目。考生可按照省级承办机构公布的流程在网上进行报名。   报名时间:每次考试具体报名时间由各省级承办机构规定,可登录各省级承办机构网站查询。   考试时间:NCRE在全国范围内每年举办两次考试,考试时间一般安排在3月最后一个周六至下周周一、9月倒数第二个周六至下周周一。   考试形式:统一命题,统一考试,考试形式为上机考试。   成绩:NCRE考试实行百分制计分,以等第形式公布成绩。成绩等第分为“优秀”、“良好”、“及格”、“不及格”四等。100-90分为“优秀”,89-80分为

    ASP+ACCESS论坛的设计与实现(论文+源代码+开题报告)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    C语言小游戏-五子棋-详细代码可运行

    使用VS-studio打开,需要安装Esayx库

    CSDNApp_238.apk

    CSDNApp_238.apk

    Apifox-在线API调试工具,全新API开发功能

    免费软件, Postman + Swagger + Mock + JMeter API 文档 API 调试

    【Unity3D插件】Unity3D HDRP Outline高亮发光轮廓描边插件教程

    【Unity3D插件】Unity3D HDRP Outline高亮发光轮廓描边插件教程

    sqlserver内存释放中文最新版本

    本文档主要讲述的是sqlserver内存释放;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

    全球干旱数据集【标准化降水蒸发指数SPEI-03】-190101-202312-0.5x0.5

    全球干旱数据集【标准化降水蒸发指数SPEI-03】(1901年1月-2023年12月,0.5°×0.5°分辨率)是基于月度降水和潜在蒸散发(PET)数据计算的全球气候数据集,专门用于中期干旱监测和分析。SPEI-03以3个月为时间尺度,更适合评估农业和生态系统的长期干旱风险。 数据集采用NetCDF格式,包含时间、空间坐标和SPEI值(无量纲)。负值表示干旱,正值表示湿润,数据经过插值和偏差矫正,确保高时空一致性。基于全球气象观测和重分析数据,如ERA5。 应用场景: 干旱监测:识别全球干旱事件的强度和持续时间。 气候变化研究:评估干旱风险和气候变化的长期影响。 农业与生态管理:支持农作物种植和生态系统保护。 水资源与灾害防治:优化水资源分配和干旱灾害应对。 该数据集为干旱风险评估和气候变化研究提供重要支持,广泛应用于环境、农业、生态和气候预测领域。

    基于java的北关村基本办公管理系统设计与实现.docx

    基于java的北关村基本办公管理系统设计与实现

    [net毕业设计]asp.net考勤管理系统设计(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    [net毕业设计]ASP.NET网络办公助理设计与实现(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    [net毕业设计]ASP.NET学生信息管理系统(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    设计和仿真了一个用于控制化学反应器温度和浓度的多变量控制系统.docx

    设计和仿真了一个用于控制化学反应器温度和浓度的多变量控制系统

Global site tag (gtag.js) - Google Analytics