浏览 4250 次
锁定老帖子 主题:扩展GridPanel
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-21
ext的强大是可以看见的,这里我在网上找了一个经过扩展的grid,主要可以实现,分页后保存checkbox的选择状态。代码如下 /** * 封装的grid * 功能:分页后仍保持选中状态 * 约定:root为list, totalProperty为total, grid的第一列必须为id */ Ext.namespace('Ext.ux.grid'); Ext.ux.grid.MyGrid = Ext.extend(Ext.grid.GridPanel,{ /* * true to keep the records selected when you paging * @default(false) * @type: boolean */ keepSelectedOnPaging: false, /* * the array to store the record id * @type: array */ recordIds:new Array(), /* * set your id Column Name * @default : this.CM_JR_Record[0].dataIndex */ idColName:'', /* * set this.store.load url; * @type: string */ url: '', /* * show the rowNumber or not * @type: boolean * @default: true */ rowNumber : true, /* * set the grid sm,if checkBoxSelection=true,sm=CheckBoxSelectionModel * else sm=RowSelectionModel,default to true; * @type: boolean */ checkBox: true, /* * set the grid cm array; * set the JsonReader record; * * format: [{name:'',header:'',visiable:'',...another cm options},{}], * @name=dataIndex * @visiable: set this record to the cm(grid header) default(true) * @type: array (records) */ CM_JR_Record: null, /* * true to add a bottom paging bar * @defalut: true * @type: boolean */ pagingBar: true, /* * config paging bar if pagingBar set true * @type: object * @default: {pageSize: 20,store: this.store,displayInfo: true, * displayMsg: '当前记录数: {0} - {1} 总记录数: {2}', * emptyMsg: '<b>0</b> 条记录'} */ pagingConfig:{ pageSize: 15, store: this.store, displayInfo: true, displayMsg: "显示第 {0} 条到 {1} 条记录,一共 {2} 条", emptyMsg: '<b>0</b> 条记录', }, viewConfig:{ forceFit: true }, //private initComponent: function(){ if(this.CM_JR_Record){ this.init_SM_CM_DS(); } if(this.pagingBar){ this.init_PagingBar(); } if(this.keepSelectedOnPaging){ this.init_OnPaging(); } Ext.ux.grid.MyGrid.superclass.initComponent.call(this); }, /* * init the grid use the config options * @return: void * @params: none */ init_SM_CM_DS: function(){ var gCm = new Array(); var gRecord = new Array(); if(this.rowNumber){ gCm[gCm.length]=new Ext.grid.RowNumberer(); } if(this.checkBox){ var sm = new Ext.grid.CheckboxSelectionModel(); gCm[gCm.length] = sm; this.selModel = sm; } for(var i=0;i<this.CM_JR_Record.length;i++) { var g = this.CM_JR_Record[i]; if(g.visiable || g.visiable=='undefined' || g.visiable==null){ gCm[gCm.length] = g; } gRecord[gRecord.length]={ name: g.dataIndex, type: g.type || 'string' } } //create grid columnModel this.cm = new Ext.grid.ColumnModel(gCm); this.cm.defaultSortable = true; //create a jsonStore this.store = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: this.url, method: 'post' }), reader:new Ext.data.JsonReader({ totalProperty: 'total', root: 'list' }, Ext.data.Record.create(gRecord) ) }); this.pagingConfig.store = this.store; if(this.pagingBar){ this.store.load({params:{start:0,limit:this.pagingConfig.pageSize}}); }else{ this.store.load(); } }, /* * 创建并初始化paging bar */ init_PagingBar: function(){ var bbar = new Ext.PagingToolbar(this.pagingConfig); this.bbar = bbar; }, init_OnPaging: function(){ this.idColName = this.CM_JR_Record[0].dataIndex ;//默认第一列为ID列 this.selModel.on('rowdeselect',function(selMdl,rowIndex,rec ){ for(var i=0;i<this.recordIds.length;i++) { if(rec.data[this.idColName] == this.recordIds[i]){ this.recordIds.splice(i,1); return; } } },this); this.selModel.on('rowselect',function(selMdl,rowIndex,rec){ if(this.hasElement(this.recordIds)){ for(var i=0;i<this.recordIds.length;i++){ if(rec.data[this.idColName] == this.recordIds[i]){ return; } } } this.recordIds.unshift(rec.data[this.idColName]); },this); this.store.on('load',function(st,recs){ if(this.hasElement(this.recordIds)){ st.each(function(rec){ Ext.each(this.recordIds,function(item,index,allItems){ if(rec.data[this.idColName] == item){ this.selModel.selectRecords([rec],true); return false; } },this); },this); } },this); }, hasElement : function(recIds){ if(recIds.length > 0) return true; else return false; } } ) //**************************这是个demo*****************var CM_JR_Record = [ { dataIndex:"id", visiable: false//不显示,反之为显示 },{ dataIndex:"accid", header:"发布人ID", visiable: true },{ header: '标题', width: 80, dataIndex: 'bt', visiable: true }, { header: '发布时间', width: 80, dataIndex: 'fbsj', visiable: true }, { header: '发布人员', width: 80, dataIndex: 'fbry', visiable: true }, { header: '审核', width: 80, dataIndex: 'sh', visiable: true }, { header: '审核人员', width: 80, dataIndex: 'shry', visiable: true }, { header: '审核时间', width: 80, dataIndex: 'shsj', visiable: true }, { header: '点击数', width: 80, dataIndex: 'snum', visiable: true }]; var myGrid = new Ext.ux.grid.MyGrid({ url : '/ecommerce/findAllBulletin.action', // the store load url (required) CM_JR_Record: CM_JR_Record, //.....(required) rowNumber:true, //true to add a Ext.grid.RowNumberer,defalut(true) checkBox:true, //true to add a Ext.grid.CheckBoxSelectionModel,default(true) pagingBar:true, //true to add a Ext.PagingToolBar,default(true) // pagingConfig:objcet, //config pagingToolBar if pagingBar is true keepSelectedOnPaging: true, //true to FireEvent when you paging to keep the state of record selected recordIds : new Array() , // store seleced ids when keepSelectedOnPaging is true idColName :'id', //the id column name width : 700, height: 600, renderTo: 'editor-grid', tbar: [{ id : 'Add', text : ' 新建 ', tooltip : '新建一个表单', iconCls : 'add', pageSize: 15, handler : function(){ ptb_bt1(); } },{ text: '删除所选', iconCls:'remove', tooltip : '删除所选数据', handler : function(){ //myGrid.recordIds是一个数组,里面存放选中的checkboxid if(myGrid.recordIds.length == 0){ Ext.MessageBox.alert('提示','请选择一条记录!'); }else{ // 弹出对话框警告 Ext.MessageBox.confirm('确认删除', '你真的要删除所选用户吗?', function(btn){ if(btn == 'yes') {// 选中了是按钮 // 调用 DWR, 执行结果成功时方删除所有数据 bulletinService.delBulletin(myGrid.recordIds.toString(), function() { // 更新界面, 来真正删除数据 Ext.Msg.alert("成功","用户数据删除成功!"); myGrid.recordIds = new Array(); myGrid.store.load({params:{start:0,limit:15}}); }); } } ); } } }] }); myGrid.render();下载地址如下http://download.csdn.net/source/521174 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-15
很不错,学习了,对于我们初学者有很好的帮助,写的很清楚,多谢!
|
|
返回顶楼 | |