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

ext2 grid 封装 (包含增删改查 导入导出等操作)

    博客分类:
  • Ext
 
阅读更多

最近项目又用到ext 比较杯具的是ext版本使用2.0

初步封装了一下grid(还在完善中)              ext技术交流群:164648099

 

取一行所有信息通用函数

Ext.override(Ext.grid.GridView,{
	getRecord:function(grid,rowIndex){
		 var self = this;
		 var colNum = grid.colModel.config.length;
		 var obj = {};
		 for(var i = 0;i<colNum ;i++){
			var cell = this.getCell(rowIndex,i);
			if(!Ext.isEmpty(grid.colModel.config[i].dataIndex)){
				obj[grid.colModel.config[i].header]=Ext.util.Format.stripTags(cell.childNodes[0].innerHTML);
			}
		 }

		return obj
	}
});

 

/**
 * @Title:Giasmanage
 * @Description:封装的综合的Grid控件,继承新增、修改、删除、检索、分页、导入、导出等功能
 * @Copyright:Copyright 2012 Beijing GICOM Network Inc. 
 * @author:babydeed
 * @version:1.1
 * @since 2012-5-28
 */ 
Ext.namespace("Ext.ux.grid");
Ext.ux.grid.MyGrid = Ext.extend(Ext.grid.GridPanel, {
	// 储存表格结构
	structure : '',
	
	//是否刚进页面就加载store
	autoloadStore:true,

	//是否有关闭按钮
	closable:true,
	
	// 表格绑定的表
	tablename : '',
    
	border:false,
	
	// 指定加载的列 默认为读取表上所有列数据
	fields : '',

	// 每页显示条数
	pageSize : 20,
	
	// 表单里控件的默认宽
	fieldwidth : 200,

	// reader类型如果当为json的时候那么url不能空,当为array的时候dataObject不能为空
	readType : 'json',

	//是否显示右键详细信息
	showDetailInfo:true ,
	
	// 获取数据的URL
	url : '',
	
	// 新增的URL
	addUrl : "",

	// 修改的URL
	updateUrl : "",

	// 删除的URL
	delUrl : "",
	
	// 导出的URL
	exportUrl : "",
	
	// 导入的URL
	importUrl : "",
	
	// 数据对象
	dataObject : null,

	// 表格主键
	keyField : '',

	// 绑定查询的列
	findField : null,
	
    //查询最大可输入长度
	findFieldMaxLength:20,
	// 是否需要分组,默认为false,如果设置为true须再设置两个参数一个为myGroupField和myGroupTextTpl
	needGroup : false,
	
	// 分组的字段名称
	myGroupField : '',
	// 分组显示的模板,eg:{text} ({[values.rs.length]} {[values.rs.length > 1 ?
	// "Items" : "Item"]})
	myGroupTextTpl : '',

	// 列模式的选择模式,默认为rowselectModel,如果相设置成check模式,就设置为check
	selectType : '',

	// 默认排序字段
	defaultSortField : 'id',

	// 是否需要分页工具栏,默认为true
	needPage : true,
	
	ejectForm : null,

	// 是否带展开按钮,默认为false
	collapsible : false,
	
	//是否显示加载条
	loadMask : true,
	
	//多字段时 保存old属性和值
	mutiKeyValus:{},
	
	//单条件查询控件
	oSingleSearchField:"",
	
	addAfterAopFun:null,
	
	viewConfig : {
		forceFit : true
	},
	// 存储表头信息
	col : null,
	
	storeType:"common",
	
	//是否显示底部分页工具栏的displayInfo属性
	isShowPageTbarInfo:true,
	
	//增删改查提交的默认参数
	actionBaseParams:{add:"",del:"",update:"",query:""},
	
	otherRightMenus:"",
	
	itemGrant:{addIsShow:true,delIsShow:true,updateIsShow:true},
	
	isShowMoreQuery:false,
	
	initComponent : function(config) {
		Ext.apply(this,config);
		if (this.structure != '') {
			this.initGrid();
		}
		
		this.initRightMenu();
		Ext.ux.grid.MyGrid.superclass.initComponent.call(this,config);
	},
	
	// 初始化事件
	initEvents : function() {
		Ext.ux.grid.MyGrid.superclass.initEvents.call(this);
		var button = Ext.query("[class=x-btn-text grid_query]",this.el.dom)[0];// 查询按钮
		var keys = {
			key : Ext.EventObject.ENTER,
			fn : function(key,p) {
				try{
					//var button = Ext.query("[class=x-btn-text grid_query]",this.el.dom)[0];
					if(button){
						button.click();
					};
				}catch(e){
				
				}
			},
			//作用域
			scope : this.getTbar() 
		};
		
		if(!this.keyMap && button){
            this.keyMap = new Ext.KeyMap(this.getTbar(),keys);
        }
	},
	
	destroy:function(){
		try{
        	this.structure=null;
        	this.actionBaseParams=null;
        	this.actionMode = null;
        	this.addAfterAopFun = null;
        	this.delUrl = null;
        	this.closable = null;
        	this.tablename = null;
        	this.border = null;
        	this.pageSize = null;
        	this.fields = null;
        	this.fieldwidth = null;
        	this.myGroupField = null;
        	this.myGroupTextTpl = null;
        	this.findFieldMaxLength = null;
        	this.needGroup = null;
        	this.needPage = null;
        	this.isShowMoreQuery = null;
        	this.itemGrant = null;
        	this.otherRightMenus = null;
        	this.isShowPageTbarInfo = null;
        	this.storeType = null;
        	this.col = null;
        	this.oSingleSearchField = null;
        	this.mutiKeyValus = null;
        	this.ejectForm = null;
        	this.defaultSortField = null;
        	this.selectType = null;
        	this.findField = null;
        	this.findFieldMaxLength = null;
        	this.keyField = null;
        	this.dataObject = null;
        	this.addUrl = null;
        	this.url = null;
        	this.delUrl = null;
        	this.updateUrl = null;
        	this.importUrl = null;
        	this.exportUrl = null;
        	this.readType = null;
        	this.autoloadStore = null;
        	this.keyMap = null;
        	Ext.ux.grid.MyGrid.superclass.destroy.apply(this,arguments);
        	CollectGarbage();
        }catch(e){
        
        }
        
    },
    
	initGrid : function() {
		//生成列模型和record
		var oCmAndRecord =  this.getCmAndRecord();
		// 生成columnModel
		if(this.cmPlugin){
			oCmAndRecord.cm.insertAt(this.cmPlugin,1);
		}
		
		this.colModel  = new Ext.grid.ColumnModel(oCmAndRecord.cm);
		// 默认可排序
		this.colModel.defaultSortable = true;
		// 生成表格数据容器
		var record = Ext.data.Record.create(oCmAndRecord.record);
		// 判断读取类别,目前只实现了,jsonreader和arrayReader 大多数下一般是jsonreader
		
		//var tablename = this.tablename;
		var pageSize = this.pageSize;
		var fields = this.fields;

		var findField = this.findField;
		
		//this.findFieldText = this.colModel.getColumnHeader( this.colModel.findColumnIndex(findField) );
		
		this.initStore(record);

		// 判断是否需要分组
		this.viewConfig  = this.myGridView||this.needGroup?this.getGroupingView():new Ext.grid.GridView({
				forceFit : true
		 });
		 
		// 生成底部分页工具栏
		if (this.needPage) {
			this.bbar = this.getBbar();
			this.bottomToolbar = this.bbar;
		}
		
		//顶部工具栏
		this.tbar = this.getTbar();
		
		//如果配置为了修改url才给每行加监听
		if(this.updateUrl){
			this.on('rowdblclick',this.doEdit.createDelegate(this,[this.keyField]));   
		}
		
		this.store.on('beforeload', function() {
					if(this.oSingleSearchField){
						var searchValue = this.oSingleSearchField.getValue();
						var findField = this.findField;
						var para = {};
						para[findField] = searchValue
						Ext.apply(this.store.baseParams, para);
					}
					
					Ext.apply(this.store.baseParams, this.actionBaseParams.query);

		},this);

		if(this.autoloadStore){
			this.store.load({
				params : {
					start : 0,
					limit : this.pageSize
				}
			});
			
		}
	}
		
});
Ext.ux.grid.MyGrid.prototype.getGroupingView = function(){
			return new Ext.grid.GroupingView({
						forceFit : true,
						groupTextTpl : this.myGroupTextTpl||'{text}(共{[values.rs.length]}条)'
			})
};

Ext.ux.grid.MyGrid.prototype.formatDate = function(v) {
		   return v ? v.dateFormat('Y-m-d') : ''
};

Ext.ux.grid.MyGrid.prototype.doSuccess = function(action, form) {
			Ext.MessageBox.hide();
			Ext.Msg.alert('提示', '操作成功');
			this.getStore().reload();
};

Ext.ux.grid.MyGrid.prototype.doFailure = function(action, form) {
			Ext.MessageBox.hide();
			Ext.Msg.alert('请求错误', '服务器未响应,请稍后再试');
};

	/*
	* @功能:删除所有选中记录支持批量删除
	* 
	*/
Ext.ux.grid.MyGrid.prototype.doDelete = function() {
		this.deleteUtil(this.delUrl,this,this.keyField);
};
	/*
	* @功能:增加和删除调用的函数
	* 
	*/
Ext.ux.grid.MyGrid.prototype.doEdit = function(id) {
			
		var tablename = this.tablename;
		
		//var keyField = this.keyField;
		var keyFields = this.keyField.split(",")
		
			var url = this.url;
			var ogrid = this;
			var oField = new Array();
			var len = this.structure.length;
			var action = "";
	
		    // 判断id是否为空 是:新增 否:修改
		    this.AddOrUpdateUrl = id ? this.updateUrl: this.addUrl;
		    var action = id?"edit":"add";
		    var titleMsg = "增加";
		    var params = this.actionBaseParams.add;
		    if (action=="edit") {
		    	var count = this.getSelectionModel().getSelections().length;
		    	if(count>1){
		    		Ext.Msg.alert("系统提示","只能编辑一条数据");
		    		return;
		    	}else if(count==0){
		    		Ext.Msg.alert("系统提示","请选择一条数据进行编辑");
		    		return;
		    	}
		    	titleMsg = "修改";
		    	params = this.actionBaseParams.del;
		    }
		    
		    //第一次进入判断 如果弹出的form不为空 则使用自定义的form 同时为当前grid.ejectForm 赋上值;如果弹出的form为空 则走else
		    //第>=2次进入判断 则始终走if语句
			if(!Ext.isEmpty(this.ejectForm) ){
					var win = this.getEjectWin();
					win.setTitle(titleMsg);
			}else{
				oField = MyExt.formUtil.getForm(this.structure);
				// ------------- 初始化字段信息 结束------------
				// 初始化表单结构
				this.ejectForm = new Ext.form.FormPanel({
										labelWidth : this.formLabelWidth||80, 
										frame : true,
										scope:this,
										border : false,
										hideBorders : true,
										autoHeight : true,
										items : oField,
										buttons : [
												{
													text : '保存',
													scope:this,
													handler : function() {
														this.doSubmitFrom(this.AddOrUpdateUrl,params);
														//doSubmitFrom.call(this,this.AddOrUpdateUrl);
													}
												}, {
													text : '关闭',
													scope:this,
													handler : function() {
														this.ejectWin.hide();
														//this.ejectWin.destroy();
													}
												}
										]
						})
					var win = this.getEjectWin();
					win.setTitle(titleMsg);
			}
			
			this.mutiKeyValus = {};
			win.show();
			
			if (this.addAfterAopFun&&action=="add") {
				this.addAfterAopFun();
			}
			
			this.changeFormItemIsReadOnly(this.ejectForm.form,this.structure,action);
	
			// 从服务器初始化表单数据
			if (id != null && id != '') {
				Ext.MessageBox.wait('正在数据加载,请稍后......', '请稍后')
				  	var record = this.getSelectionModel().getSelected();//获取选择的记录集
	                var oldKeyids={};
	                if(keyFields.length>1){
		                for(var k = 0;k < keyFields.length; k++){
		                	var oldName = keyFields[k]+"Old";
		                	oldKeyids[oldName]=record.get(keyFields[k]);
		                }
		                this.mutiKeyValus = oldKeyids;
	                }
	                this.ejectForm.form.loadRecord(record); //往表单(fp.form)加载数据
	                Ext.MessageBox.hide();
					
			}
};

//=========================================================================
//  初始化grid导入的操作代码
//=========================================================================
Ext.ux.grid.MyGrid.prototype.doImport = function(){
		     var form = new Ext.form.FormPanel({    
												     labelAlign: 'center',    
												     labelWidth:60,   
												     frame:true, 
												     url: this.importUrl,  
												     width: 300,    
												     border:false,
												     bodyStyle:"margin-top:30",  
												     height:100,   
												     fileUpload: true,//这项一定要要,表是是上传文件   
												     items: [{  
												        xtype: 'textfield', 
												        fieldLabel: '文件路径',    
												        name: 'filePath',    
												        inputType: 'file'//文件类型    
												     }],    
												     buttons: [{    
												        text: '导入',
												        scope:this,    
												        handler: function() {
												        if(form.getForm().isValid() && checkFiletype(form)){
													        var reg=/\\+/;//获取文件名,主要为了区别IE,FireFox
													        var filePath = form.form.findField("filePath").getValue();
													       // alert(filePath)
													       Ext.Msg.show({
															   title: '系统提示',
															   msg: '<font color=black>正在导入中...</font>',
															   width: 250,
															   wait:true,
															   mode:true,
															   progress:true,
															   closable:false  
															});
													        Ext.Ajax.request({
													        	waitMsg:"文件上传中......",  
																url : this.importUrl,
																scope:this,
																form:form.form.id,
																success : function(response) {
																	Ext.MessageBox.hide();
																	var result = Ext.decode(response.responseText);
																	if(result.success){
																		this.getStore().reload();
																		excelWin.hide();
																		new Ext.ux.Notification({autoHide:true}).showSuccess('提示', result.msg);
																	}else{
																		new Ext.ux.Notification().showFailure('提示', result.msg);
																	}
																},
																failure : function(form,action){
																	Ext.MessageBox.hide();
																	new Ext.ux.Notification().showFailure('操作失败','导入失败,请重新导入'); 
																}
															});//endof ajax
							
							
												        
													    /* form.getForm().submit({  
													        waitMsg:"文件上传中......",  
													        success: function(form, action){ 
													        		alert(11);
															        if (action.result.success) {
															        	new Ext.ux.Notification({autoHide:true}).showSuccess('操作成功','文件上传成功!');
															        }else{
																		new Ext.ux.Notification().showFailure('操作失败',action.result.msg);
																	}
													        },    
													        failure: function(form,action){
														          alert("失败")
														          if(action.result.head==2044){
														          	new Ext.ux.Notification().showFailure('操作失败','令牌序列号插入冲突,请重新插入'); 
														          }else{
														          	new Ext.ux.Notification().showFailure('错误', '文件上传失败'); 
														          }
													          
													        }    
												     	});  */
												    } 
												    }   
												  }
										  ]    
										  });  
										excelWin = new Ext.Window({
											    width:310,
											    shadow:false,
											    title:"Excel导入",
												autoHeight:true,
											    resizable:false, 
											    constrain:true, 
											    closeAction:'hide',//点击右上角关闭按钮是动作是把win隐藏
											    layout:'fit',
											    closable:true,
											    modal:true, 
									    	    items:[form]
									     })
									     excelWin.show();   
										 checkFiletype = function(form){
										  	var epath = form.form.findField("filePath").getValue();
										  	if (epath.substring(epath.lastIndexOf(".") + 1).toLowerCase() == "xls" || 
										  		epath.substring(epath.lastIndexOf(".") + 1).toLowerCase() == "xlsx"){
										  		return true;
										  	}else{
										  		new Ext.ux.Notification().showFailure('错误', '只允许导入excel文件'); 
										  		return false;
										  	}
				}
}
//=========================================================================
//  初始化grid的store
//=========================================================================
Ext.ux.grid.MyGrid.prototype.initStore = function(record){
				switch (this.readType) {
					case 'json' :
						var reader = new Ext.data.JsonReader({
									totalProperty : "total",
									root : "list",
									id : this.keyField,
									baseParams :this.storeBaseParams
								// 关键字段
								}, record);
						if(this.storeType=="common"){
							this.store = new Ext.data.Store({
											proxy : new Ext.data.HttpProxy({
											url : this.url
										}),
										reader : reader,
//										sortInfo : {
//											field : this.defaultSortField,
//											direction : 'ASC'
//										},
										//remoteSort : false,
										remoteSort:this.cmRemoteSort||false//是否后台排序
										//,groupField : this.myGroupField || this.defaultSortField
										/*,listeners : {
											'loadexception' : function() {
												alert('reload')
											}
										}*/
							});
						}else{
							this.store = new Ext.data.GroupingStore({
											proxy : new Ext.data.HttpProxy({
											url : this.url
										}),
										reader : reader,
										sortInfo : {
											field : this.defaultSortField,
											direction : 'ASC'
										},
										remoteSort:this.cmRemoteSort||false,//后台排序
										groupField : this.myGroupField || this.defaultSortField
										/*,listeners : {
											'loadexception' : function() {
												alert('reload')
											}
										}*/
							});						
						}

						break;
					case 'array' :
						var reader = new Ext.data.ArrayReader({}, record);
						this.store = new Ext.data.GroupingStore({
							reader : reader,
							data : this.dataObject,
							sortInfo : {
								field : this.defaultSortField,
								direction : 'ASC'
							},
							groupField : this.myGroupField
						});
						break;
					default :
						break;
				}//endof swith
};
//=========================================================================
//  初始化grid右键菜单
//=========================================================================
Ext.ux.grid.MyGrid.prototype.initRightMenu = function(){
			if(!this.myRightMenu){
				this.myRightMenu =  new Ext.menu.Menu({
						        items: [
							        		
						       		   ]
				});
				
				if(this.showDetailInfo){
				 	this.myRightMenu.add({iconCls:"user-detail-icon",text:"显示详细信息",scope:this,handler:function(){
				 			var index = this.getStore().indexOf(this.getSelectionModel().getSelected());
				 			if(this.showDetailInfoIsGrid){
									var obj = this.getView().getRecord(this,index);
									var grid = new Ext.grid.PropertyGrid({
										        autoHeight:true,
										        width: 300,
										        autoScroll:true,
										        source: obj,
										        listeners:{
										        	"beforeedit":function(e) {
															e.cancel = true;
															return false; 
													}
										        }
									});
							  		var win = new Ext.Window ({
							  			title:"详细信息",
							  			items:grid,
							  			layout:"fit",
							  			width:460,
							  			autoScroll:true, 
							  			autoHeight:true,
										draggable:true,
										modal:true, 
										resizable:false,
							  			closeAction:"close",
							  			buttonAlign:"center",
							  			buttons:[{text:"关闭",iconCls:'close',handler:function(){
							  				this.ownerCt.close();
							  			}}]
							  		}).show();				 			  
				 			  }else{
				 			  		var items = MyExt.formUtil.getReadOnlyForm(this.structure,100);
									var win = new MyExt.win.commonWin({
								 					width : 450,
								 					title:"详细信息",
								 					layout:"fit",
								 					items : items,
								 					closeAction:"hide",
								 					buttons:[
								 						{text:"关闭",handler:function(){
								 							this.ownerCt.close();
								 						}}
								 					]
									});	
									win.show();
		 							var obj = this.getView().getRecordOfName(this,index);
		 							win.items.item(0).form.setValues(obj);
				 			  }
							
						}
					})
				 }
				 
				if(!Ext.isEmpty(this.addUrl)){
					if(this.itemGrant.addIsShow){
						this.myRightMenu.add({iconCls:"user-add-icon",text:this.addText||"增加",scope:this,handler:function(){
								this.doEdit();
							}
						})
					}
				 }
				 if(!Ext.isEmpty(this.updateUrl)){
				 	if(this.itemGrant.updateIsShow){
						this.myRightMenu.add({iconCls:"user-edit-icon",text:this.addText||"修改",scope:this,handler:function(){
								this.doEdit(this.keyField);
							}
						})
					}
				 }
				 
				 if(!Ext.isEmpty(this.delUrl)){
				 	if(this.itemGrant.delIsShow){
						this.myRightMenu.add({iconCls:"user-delete-icon",text:this.delText||"删除",scope:this,handler:function(){
								this.doDelete();
							}
						})
					}
				 }
				 if(!Ext.isEmpty(this.importUrl)){
					this.myRightMenu.add({iconCls:"user-export-icon",text:"导入",scope:this,handler:function(){
							this.doImport();
						}
					})
				 }
				 
				 if(!Ext.isEmpty(this.exportUrl)){
					this.myRightMenu.add({iconCls:"user-export-icon",text:"导出",scope:this,handler:function(){
							MyExt.util.exportCurentTable(this,this.exportUrl,this.title||"导出文件");
						}
					})
				 }
				 
				 if(!Ext.isEmpty(this.otherRightMenus)){
				 	for(var i = 0;i<this.otherRightMenus.length;i++){
				 		this.myRightMenu.add(this.otherRightMenus[i])
				 	}
				 }
			}
		
				  		
	  		if(!this.hasListener("rowcontextmenu")){
	  			if(this.myRightMenu.items.length!=0){
			  		this.on("rowcontextmenu",function(grid, rowIndex, e){
				        		e.preventDefault();
						        grid.getSelectionModel().selectRow(rowIndex);
						        this.myRightMenu.showAt(e.getXY());
				    });
	  			}
	  		}
};//endof 右键

//=========================================================================
//  获得底部工具栏
//=========================================================================
Ext.ux.grid.MyGrid.prototype.getBbar = function(){
				var butItems = [];
				if (this.addUrl) {
						if(this.itemGrant.addIsShow){
							butItems.push({
									iconCls : 'user-add-icon',
									text : "增加新数据",
									scope:this,
									handler : function() {
										this.doEdit();
									}
							});
							butItems.push('-');
						}
				};
				if (this.updateUrl) {
						if(this.itemGrant.updateIsShow){
							butItems.push({
									iconCls : 'user-edit-icon',
									text : "编辑当前数据",
									scope:this,
									handler : function() {
											var record = this.getSelectionModel().getSelected();
											if (record == null) {
												Ext.Msg.alert('提示', '请先选择你要编辑的数据');
												return;
											}
											//var id = record.get(this.keyField);
											//alert(id);
											this.doEdit(this.keyField);
									}
							});
							butItems.push('-');
						}
				};
				if (this.delUrl) {
					if(this.itemGrant.delIsShow){
						butItems.push({
								iconCls : 'user-delete-icon',
								text : "删除所选数据",
								scope:this,
								handler : function() {
									this.doDelete();
								}
						});
						butItems.push('-');
					}
				};
				
				if(this.exportUrl){
					butItems.push({
							iconCls : 'exportToExcel',
							text : "导出数据",
							scope:this,
							handler:function(){
								MyExt.util.exportCurentTable(this,this.exportUrl,this.title||"导出文件");
							}
							/*menu:new Ext.menu.Menu({
							items:[
										{iconCls:"exportToExcel",scope:this,text:"导出当前页",handler:function(){	
											alert(this.exportUrl);
										 }},
										{iconCls:"exportToExcel",text:"导出当前表",handler:function(){	
				
										}}
						    	 ]
							}) */
					})
				}
				if(this.importUrl){
					butItems.push({
						iconCls : 'exportToExcel',
							text : "导入数据",
							scope:this,
							handler : function() {
								//	alert(this.importUrl);
								this.doImport();
						}
					})
				}
				var tbar = null;
				if(this.isShowPageTbarInfo==false){
					tbar = new Ext.PagingToolbar({
								pageSize : this.pageSize,
								displayInfo :false,
								displayMsg : '当前记录数:{0} - {1} 总记录数: {2}',
								emptyMsg : '没有符合条件的记录',
								store : this.store,
								items:butItems
					});
				}else{
					tbar = 	new Ext.PagingToolbar({
							pageSize : this.pageSize,
							displayInfo : Ext.isEmpty(this.displayInfo)?true:false,
							displayMsg : '当前记录数:{0} - {1} 总记录数: {2}',
							emptyMsg : '没有符合条件的记录',
							plugins:new Ext.ux.Andrie.pPageSize(),
							//plugins:new Ext.ux.PageComboResizer(),
							store : this.store,
							items:butItems
						});
				}
			return tbar;
};
		
//=========================================================================
//  获得顶部工具栏
//=========================================================================		
Ext.ux.grid.MyGrid.prototype.getTbar = function(){
				if(this.tbar){
					return this.tbar;
				}
				//如果是单字段主键查询
				else if(!Ext.isEmpty(this.findField)&&Ext.isEmpty(this.tbar)&&Ext.isEmpty(this.tbarQueryItem)){
					var tbarArray = [];
					
					this.oSingleSearchField = new Ext.ux.form.SearchField({
						store : this.store,
						paramName:this.findField,
						maxLength:this.findFieldMaxLength,
						width:150
					});
					var cm = this.getColumnModel();	
					tbarArray.push(cm.getColumnHeader(cm.findColumnIndex(this.findField)));
					tbarArray.push(":");
					tbarArray.push(this.oSingleSearchField);
					
					var tbar =  new Ext.Toolbar({items:tbarArray});
					return tbar;
				}
				//如果是自定义多字段查询
				else if(!Ext.isEmpty(this.tbarQueryItem)){
					var tbarArray = [];
					var item = MyExt.formUtil.getTbarQueryItem(this.structure,this.tbarQueryItem);
					tbarArray = tbarArray.concat(item);
					//alert(item.length);
					tbarArray.push("&nbsp;&nbsp;&nbsp;")
					tbarArray.push(
							new Ext.Button({scope:this,iconCls:"grid_query",text:'查询',listeners:{
								click:function(){
									var tbarPara = MyExt.formUtil.getTbarValues(this.getTopToolbar());
								
									Ext.apply(this.store.baseParams,tbarPara)
									
									if(this.theTwoQueryTbar){//如果含有第2层tbar
										var theTwoQueryBar = MyExt.formUtil.getTbarValues(this.theTwoQueryTbar);
										Ext.apply(this.store.baseParams,theTwoQueryBar)
									}
									
									var store = this.store;
									
									store.load({
														params : {
															start : 0,
															limit : 20
														}
									});
								
								},
								scope:this
								
							}
						})
					);
					tbarArray.push("-");
					
					if(this.isShowMoreQuery){
							this.showMoveQueryButton =	new Ext.Button({scope:this,iconCls:"queryMore",text:'显示更多查询条件',handler:function(){
									if(!this.theTwoQueryTbar){
										var tbarArray = [];
										var item = MyExt.formUtil.getTbarQueryItem(this.structure,this.tbarMoveQueryItem);
										tbarArray = tbarArray.concat(item);
										this.theTwoQueryTbar =  new Ext.Toolbar({items:tbarArray});
										var width = this.getSize().width;
										this.theTwoQueryTbar.render(this.tbar);
										this.setHeight(this.getSize().height-this.theTwoQueryTbar.getSize().height)
										this.setWidth(width);
										this.showMoveQueryButton.setText("关闭更多查询条件");
									}else{
										if(this.theTwoQueryTbar.isVisible()){
											var grid = this;
											MyExt.formUtil.setTbarValuesNull(grid.theTwoQueryTbar);
											var width = this.getSize().width;
											var height = this.theTwoQueryTbar.getSize().height;
											this.theTwoQueryTbar.hide();
											this.setHeight(this.getSize().height+height);
											this.setWidth(width);
											this.showMoveQueryButton.setText("显示更多查询条件");
										}else{
											var width = this.getSize().width;
											this.theTwoQueryTbar.show();
											var height = this.theTwoQueryTbar.getSize().height;
											this.setHeight(this.getSize().height-height);
											this.setWidth(width);
											this.showMoveQueryButton.setText("关闭更多查询条件");
										}
									}
								}
							});

							tbarArray.push(this.showMoveQueryButton)
							tbarArray.push("-");
					};
					
					tbarArray.push(
						new Ext.Button({scope:this,iconCls:"table_refresh",text:'显示全部',handler:function(){
								var grid = this;
								MyExt.formUtil.setTbarValuesNull(grid.getTopToolbar());
								if(this.theTwoQueryTbar){//如果含有第2层tbar
									MyExt.formUtil.setTbarValuesNull(this.theTwoQueryTbar);
									var para = MyExt.formUtil.getTbarValues(this.theTwoQueryTbar);
									Ext.apply(this.store.baseParams,para)
								}
								var tbarPara = MyExt.formUtil.getTbarValues(grid.getTopToolbar());
								Ext.apply(this.store.baseParams,tbarPara)
								
								this.store.load({
												params : {
													start : 0,
													limit : this.pageSize
												}
								});
							}
						})
					);
					
					var tbar =  new Ext.Toolbar({items:tbarArray});
					return tbar;
				
				}
				
};

//=========================================================================
//   增加和修改最后提交的函数
//=========================================================================		
Ext.ux.grid.MyGrid.prototype.doSubmitFrom =function(url,params){
		if (this.ejectForm.form.isValid()) {
						Ext.apply(this.mutiKeyValus,params);
						Ext.Ajax.request({
								url : url,
								params:this.mutiKeyValus,
								method : 'POST',
								form : this.ejectForm.form.id,
								scope : this,
								waitMsg : '正在保存数据,请等待...', // 显示读盘的动画效果,执行完成后效果消失
								success:function(response){
									var result = Ext.util.JSON.decode(response.responseText);
									if(result.success){
										new Ext.ux.Notification({autoHide:true}).showSuccess('提示', result.msg);
										this.getStore().reload({
												params : {
													start : 0,
													limit : this.pageSize
												}
										});

										this.ejectWin.hide();
									}else{
										new Ext.ux.Notification().showFailure('提示', result.msg);
									}
									//Ext.Msg.alert('提示', '操作成功');
									
								},
								failure : function() {
									new Ext.ux.Notification().showFailure('提示', '操作失败');
									//Ext.Msg.alert('提示', '操作失败');
									//this.loadCurrData();
								}
							});
							
							
					/*ogrid.ejectForm.form.submit({
						waitTitle : "请稍候",
						waitMsg : "正在提交表单数据,请稍候。。。。。。",
						success : function() {
							ogrid.getStore().reload();
							Ext.Msg.alert('提示', '操作成功');
						},
						failure : ogrid.doFailure
						
						});*/
						}
}

//=========================================================================
//  获取增加和修改的window
//=========================================================================
Ext.ux.grid.MyGrid.prototype.getEjectWin =function(){
	if( Ext.isEmpty(this.ejectWin) ){
			this.ejectWin = new Ext.Window({
						title :this.title,
						labelWidth : 100,
						frame : true,
						autoHeight : true,
						//height : 400,
						modal: true,
						//maximizable:true,
						resizable:false,
			            shadow: false,
						closeAction:"hide",
						width : 450
						,items : this.ejectForm	
						,listeners:{
							"hide":function(){
								this.items.item(0).form.reset();
							}
						}	
		})
	}
	return this.ejectWin;
}

//=========================================================================
//  获取列模型和Record
//=========================================================================
Ext.ux.grid.MyGrid.prototype.getCmAndRecord = function(){
				var oCM = new Array(); // 列模式数组
				
				this.readOnlyField = [];
				var oRecord = new Array(); // 容器对数组
				// 构成grid的两个必须组件: column和record,根据structure将这两个组件创建出来
				
				oCM[oCM.length] = new Ext.grid.RowNumberer({width:35});
				// 判断表格的选择模式
				//alert(1);
				if (this.selectType == 'check') {
					var sm = new Ext.grid.CheckboxSelectionModel();
					oCM[oCM.length] = sm;// 在列模式数组中添加checkbox模式按钮
					this.selModel = sm;// 并将selModel设置为check模式
				}else if(this.selectType == 'single'){
					// 在列模式数组中添加single模式按钮
					var sm = new Ext.grid.RowSelectionModel({ singleSelect: true })
					//oCM[oCM.length] = sm;
					this.sm = sm;
				}
				
				var len = this.structure.length;// 得到结构的长度
				
				for (var i = 0; i < len; i=i+1) {
					var c = this.structure[i];
					// alert( c.hidden ? c.width: this.fieldwidth)
					// 如果字段为hidden,则不生成filters和columnMode
					
					// 默认格式化日期列
					//if (c.type == 'date' && !c.renderer) {
					//	c.renderer = this.formatDate;
					//}
					if(c.type == 'label'){
						this.readOnlyField.push({name:c.name,addIsShow:c.addIsShow});
					}
					oCM[oCM.length] = {
						header : c.header,
						dataIndex : c.name,
						hidden : c.hidden || false,
						width : c.width ||this.fieldwidth,
						// 类型为数字则右对齐
						align : c.type == 'numeric' ? 'right' : 'left',
						// 结构的渲染函数
						renderer : c.renderer,
						detailIsShow:c.detailIsShow
					};
			
					oRecord[oRecord.length] = {
						name : c.name,
						mapping:c.name
						// 如果类型不是date型则全部为string型
						//,type : c.type == 'date' ? 'date' : 'string'
						//dateFormat : 'Y-m-d'
					};
				}
				return {cm:oCM,record:oRecord};
}

		
//=========================================================================
//  表格删除方法
//=========================================================================
Ext.ux.grid.MyGrid.prototype.deleteUtil = function(){
			var agru = arguments;
			var argsLen = arguments.length;//参数的长度
			var grid = arguments[1];
			var url = arguments[0];
			var keyIds = arguments[2].split(",");
			var rows  = grid.getSelectionModel().getSelections(); 
			if(Ext.isEmpty(rows)||rows.length==0){
				Ext.Msg.alert("系统提示","请选择要删除的数据");
				return;
			};
			var txt = "您确定要删除";
			try{
				//if(keyIds.length==1){
					var cm = grid.getColumnModel()
					var col = cm.findColumnIndex(keyIds[0])	
					var columnHeader = cm.getColumnHeader(col);
					txt +="<font color=red>";
					txt += columnHeader+":";
					for(var r = 0 ; r<rows.length;r++){
						txt += rows[r].get(keyIds[0]);
						if(r!=rows.length-1){
							txt +=";"
						}
					}
					txt +="</font>";
				//}
					txt +="吗?";
			}catch(t){
				txt = "您确定要删除吗";
			}
			
			Ext.MessageBox.confirm("系统提示",txt,function(btn){
				   		if(btn=="yes"){
							var rows  = grid.getSelectionModel().getSelections(); 
							var rowsLen = rows.length;
							var jsonArray=[];
							for(var i = 0; i < rowsLen; i=i+1) {
								var obj = {};
								for(var j = 0;j<keyIds.length;j=j+1){
									 var a = keyIds[j];
									 obj[a] = rows[i].get(a);
								}
								jsonArray.push(obj);
							}
//							Ext.Msg.show({
//							   title: '系统提示',
//							   msg: '<font color=black>正在删除中...</font>',
//							   width: 250,
//							   wait:true,
//							   mode:true,
//							   progress:true,
//							   closable:false  
//							})
							var params = Ext.apply({deleteIds:Ext.encode(jsonArray)},this.actionBaseParams.del)
							Ext.Ajax.request({
										url:agru[0],
										params:params,
										showWaitMsg:true,										
										method:"POST",
										success:function(response){
											var result = Ext.util.JSON.decode(response.responseText);
											if(result.success){
												grid.getStore().reload();
												new Ext.ux.Notification({autoHide:true}).showSuccess('提示', result.msg);
											}else{
												new Ext.ux.Notification().showFailure('提示', result.msg);
											}
										}
							});
				        }
				},this)
};
Ext.ux.grid.MyGrid.prototype.changeFormItemIsReadOnly = function(form,array,action){
	for(var i = 0, len = array.length; i < len; i=i+1){
                var f = form.findField(array[i].name);
                var addIsShow = array[i].addIsShow;
                var editIsReadOnly = array[i].editIsReadOnly;
                var editIsShow = array[i].editIsShow;
                
                if(f){
			        if(action=="add"){   //如果是增加
				        	
				        	if(addIsShow==true||Ext.isEmpty(addIsShow)){   //如果是该字段要显示
				        		f.show();
				        		f.removeClass("x-item-disabled");
				        		f.getEl().up('.x-form-item').setDisplayed(true); 
				        	}else if(addIsShow==false){ 				//如果不需要显示
				        		f.hide();                   
				        		f.getEl().up('.x-form-item').setDisplayed(false); //隐藏序号id
				        		f.addClass("x-item-disabled");
				        	}
				        	
				        	if(f.getXType()!="combo"){
				        		if(f.rendered){
						           f.el.dom.readOnly = false;
						           //f.el.dom.style.background = "#E5E5E5";
						        }else{
						       	 	f.readOnly = false;
						        }
				        	};

					        
			         }else if (action=="edit"){		//如果是修改
			          		if(editIsReadOnly == true){
			          				f.show();
			          				f.getEl().up('.x-form-item').setDisplayed(true); //隐藏序号id
			          				f.addClass("x-item-disabled");
				          			if(f.rendered){
							           f.el.dom.readOnly = true;
							        }else{
							       	 	f.readOnly = true;
							        }
							        
			          		}else if(editIsReadOnly == false){            //此行可能删除if括号内判断
			          				f.removeClass("x-item-disabled");
			          				f.show();
			          				if(f.getXType()!="combo"){
				          				if(f.rendered){
								           f.el.dom.readOnly = false;
								        }else{
								       	 	f.readOnly = false;
								        }
							        }
							        
			          		}
			          		
			          		if( editIsShow == true ){
			          				f.show();
			          				f.removeClass("x-item-disabled");
			          				f.getEl().up('.x-form-item').setDisplayed(true); //隐藏序号id
			          				if(f.rendered){
							           f.el.dom.readOnly = false;
							        }else{
							       	 	f.readOnly = false;
							        }
			          			
			          		}else if( Ext.isEmpty(editIsReadOnly) && editIsShow==false ){
			          			f.getEl().up('.x-form-item').setDisplayed(false); //隐藏序号id
			          			f.hide();
			          		}
			          	}	
			         } //if结束
    }//for循环结束
}
//右键显示详细信息是否是grid 否则是form
Ext.ux.grid.MyGrid.prototype.showDetailInfoIsGrid = false;

 

 

上面代码中还会用到附件utils.rar中的某些方法

以上代码不断完善中,如有错误请指正,谢谢!

 

 

 

另附ext技术交流群:164648099

 

 

附件还包含群友翻译的“extjs4.0手册翻译.rar”     感谢“天渡云”朋友

3
0
分享到:
评论
1 楼 zy463395598 2012-04-19  
thanks la

相关推荐

    Extjs 增删改查

    它提供了丰富的组件库,可以方便地实现诸如表格数据展示、增删改查等常见功能。本文将详细介绍如何利用Extjs进行数据的增删改查操作。 #### 二、知识点概述 根据题目给出的信息,本文主要围绕Extjs中的表格组件...

    ajax ext 表格数据导出

    "grid2excel"可能是实现这个功能的一个特定函数或者库,它可能封装了上述过程,包括从Grid获取数据,通过Ajax发送请求,以及处理服务器返回的Excel数据,方便开发者快速实现导出功能。 6. **标签中的"girdl"可能是...

    ExtJs6.5Grid列表导出(包含样式)

    2. **样式处理**:要保持导出文件中的样式,我们需要解析Grid的CSS规则,并将它们应用到导出的表格中。ExtJs提供了`Ext.util.CSS`类来操作CSS。遍历Grid的所有Column,根据Column的配置项,如`width`、`align`、`...

    Ext JS 3.1.1 Ultimate 版

    4. **Ajax支持**:提供了一套完整的Ajax解决方案,包括异步请求、数据封装、错误处理等,简化了与服务器端的通信。 5. **拖放功能**:支持拖放操作,使得用户可以轻松地在不同组件间移动元素。 6. **可访问性**:...

    ExtAspNet控件 v3.1.9源码2012825

    -增加动态创建模板列示例grid/griddynamiccolumns2.aspx(大鸟打小鸟)。 -修正按钮的Type设为Reset无效的问题,注意重置的其实是页面上所有的表单控件(e先生)。 -修正英文下确认对话框标题依然默认中文的问题。 -...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)Eclipse版本

    4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 -所有Icon的列表在icon.aspx。 -为Button,MenuItem(MenuButton,...

    EXTJS.docx

    - **ext-base.js**:包含EXT的核心代码,是框架的基础,负责处理DOM操作、事件管理等底层任务。 - **ext-core.js**:封装了EXT的核心组件,如面板、按钮、网格等,是构建用户界面的关键。 - **ext-core-debug.js**:...

    ExtAspNet_v2.3.2_dll

    +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 -所有Icon的列表在icon.aspx。 -为Button,MenuItem(MenuButton,...

Global site tag (gtag.js) - Google Analytics