- 浏览: 150408 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
java_ahhhy8618:
沙发先坐着
IP地址、手机归属和身份证查询接口 -
xiaohui886688:
不错,分析得挺不错。
renderTo和applyTo的区别 -
xxdd328:
redirect-action ----> redi ...
struts2.1.X关于配置redirect-action启动出错的解决方法 -
jackieban:
这个确实是个bug我也发现过,好像用这个的时候不能定义全局的
struts2.1.X关于配置redirect-action启动出错的解决方法 -
x03570227:
LZ是来show工具的吧
GRID中嵌套表格
扩展grid代码
/** * @auther huangfeng * @class Ext.ux.GridExtend * 通用的grid */ Ext.ux.GridExtend=function(config){ Ext.QuickTips.init(); this.config=config; this.filters=this.config.filters||''; /** * @param {String} * 显示列表的id */ this.el=this.config.el||document.body; /** * @param {String} * 读取编辑数据的form的url */ this.editUrl=this.config.editUrl; /** * @param {String} * 读取编辑数据的form的url */ this.deleteUrl=this.config.deleteUrl; /** * @param {String} * 读取列表数据的url */ this.storeUrl=this.config.storeUrl; /** * @param {String} * 保存添加到列表数据的url */ this.formSaveUrl=this.config.formSaveUrl; /** * @param {String} * 列表的标题 */ this.title=this.config.title||''; /** * @param {Array} * 列表顶部状态栏 */ this.tbar=this.config.tbar||[{//grid顶部栏位 text:'添加',//按钮的名称 tooltip:'添加数据',//鼠标停留在按钮上的提示 iconCls:'add',//按钮图表的类 handler:this.newInfo.createDelegate(this)//处理按钮被点击时触发的时间函数 },'-',{//'-'为多按钮间隔符 text:'删除',//删除按钮的名称 tooltip:'删除数据',//鼠标停留在按钮上的提示 iconCls:'remove',//按钮图表的类 handler:this.handlerDelete.createDelegate(this) //处理按钮被点击时触发的时间函数 },'-',{ text:'导出Excel',//导出Excel按钮的名称 tooltip:'导出Excel',//鼠标停留在按钮上的提示 iconCls:'exportExcel', handler:this.exportExcel.createDelegate(this)//处理按钮被点击时触发的时间函数 }]; /** * @param 选择框对象(模型) */ this.sm=this.config.sm||new Ext.grid.CheckboxSelectionModel({ //start Ext.grid.CheckboxSelectionModel singleSelect:false//是否只能选择一个 }); /** * @param {Array} * 列表的栏的前面数据 */ this.cmDataArrayBefore=[ //start Ext.grid.ColumnModel //defaultSortable:true,//默认情况下为排序 new Ext.grid.RowNumberer(),//数据函数序列号 this.sm ]; /** * @param {Array} * 显示的内容是从后台读取出来的数据,所以此数据中的dataIndex属性要与 * 从后台读取的字段要一致 */ this.cmDataArray=this.config.cmDataArray||[]; /** * @param {Array} * 列表的栏的后面数据 */ this.cmDataArrayAfter=this.config.cmDataArrayAfter||[]; /** * @param {Ext.grid.ColumnModel} * 列表的栏位数据 */ this.cm=this.config.cm||new Ext.grid.ColumnModel( this.cmDataArrayBefore.concat(this.cmDataArray).concat(this.cmDataArrayAfter) );//end Ext.grid.ColumnModel /** * @param {Array} * 读取gridStore数据的字段设置数据对象 */ this.gridStoreFields=this.config.gridStoreFields||new Array(); /* * 如果this.gridStoreFields中没有数据,把this.cmDataArray中的dataIndex的属性值 * 赋予gridStoreFields数组中对象的name属性值 */ if(this.gridStoreFields.length==0){ for(var i=0,len=this.cmDataArray.length;i<len;i++){ this.gridStoreFields[i]={name:this.cmDataArray[i].dataIndex}; } } /** * @param {new Ext.data.Store} * 从后台读取的列表内容 */ this.gridStore=this.config.gridStore||new Ext.data.Store({ //start Ext.data.Store proxy:new Ext.data.HttpProxy({ url:this.storeUrl//读取数据的url }), reader:new Ext.data.JsonReader({//start Ext.data.JsonReader root:'rows', //存储数据的属性 totalProperty:'results',//总共的页数 id:'uniqueCode'//每行的id值 },//end Ext.data.JsonReader this.gridStoreFields) });//end Ext.data.Store this.gridStore.load({params:{start: 0, limit: 10}}); /** * @param {Ext.PagingToolbar} * 底部状态栏 */ this.bbar=this.config.bbar||new Ext.PagingToolbar({//在grid底层添加分页工具栏 pageSize:10,//显示的数据条数 store:this.gridStore,//选择翻页按钮时的加载到grid的数据 displayInfo:true,//设置是否显示分页栏的信息 displayMsg:'显示第 {0} 条到 {1} 条记录,一共 {2} 条', //消息栏的页数信息 emptyMsg:"没有记录"//当没有记录时要显示的信息 });//end bbar /** * 如果要设置此参数必须在cm中设置相应的id */ this.autoExpandColumn=this.config.autoExpandColumn||''; /** @param {Object} * 默认情况下有此显现,如果不需要可以为false * 必须含有下列参数: * loadingEL {String} 加载页面时显示的内容id * loadingMaskEl {String} 渐显的内容id */ this.loadingMark=this.config.loadingMark||{ loadingEL:'loading', loadingMaskEL:'loading-mask' }; /** * @param {Ext.grid.GridPanel} * @private */ this.grid=this.config.gridStore||new Ext.grid.GridPanel({ //el:this.el, //显示grid对象的层ID. store:this.gridStore,// grid装载的数据. viewConfig:{ autoFill:true, deferEmptyText:'请等待...', emptyText:'没有数据', enableRowBody:true }, sm:this.sm,//在每行数据前添加的一组checkBox height:Ext.get(this.el).getComputedHeight(), //autoHeight:true, loadMask:true, maskDisabled:true, cm:this.cm, //设置栏位. title:this.title,//标题名称. iconCls:'icon-grid',//标题前的图片css类 autoExpandColumn:this.autoExpandColumn, plugins: this.filters, bbar:this.bbar, tbar:this.tbar }); this.formFields=this.config.formFields||new Array(); /** * 双击数据的事件,弹出一个编辑此条数据的层 * @param grid 此列表的对象 * @param rowIndex 在列表中的行数 * @param e 触发此事件的事件对象 */ this.rowdblclick=this.config.rowdblclick||function(grid, rowIndex, e){ var selectId=this.gridStore.data.items[rowIndex].id; this.editInfo(selectId); }; this.grid.on('rowdblclick',this.rowdblclick.createDelegate(this)); this.grid.render(this.el); //当js加载完毕后删除loading页面并渐显内容 if(this.loadingMark){ setTimeout(function(){ Ext.get(this.loadingMark.loadingEL).remove(); Ext.get(this.loadingMark.loadingMaskEL).fadeOut({remove:true}); }.createDelegate(this), 250); } } Ext.ux.GridExtend.prototype={ /** * 加载 form表单的数据 * @param selectId 选择此条数据的唯一标识码,此参数发送到后台处理 */ editInfo:function(selectId){ var form=this.getForm(); form.form.load({//start load 参数设置 url:this.editUrl, params:{ uniqueCode:selectId }, waitMsg:'Loading..' });//end load 参数设置 this.formWindow(form,'编辑'); }, getForm:function(){ //错误信息放在右边 Ext.form.Field.prototype.msgTarget = 'side'; //var formSaveUrl=this.formSaveUrl; //var formFields=this.formFields; var formSaveUrl=Ext.clone(this.formSaveUrl); var formFields=Ext.clone(this.formFields); //实例化form面板 var form=new Ext.form.FormPanel({//start Ext.form.FormPanel baseCls:'x-plain', url:this.formSaveUrl, frame:true, id:'form', items:formFields });//end Ext.form.FormPanel return form; }, /** * 装form表单的窗口 * @param form 要装载的form @param titlePre 标题的前缀 */ formWindow:function(form,titlePre){ //实例化窗口 this.window=new Ext.Window({//start Ext.Window title:titlePre+'任务列表', width:500, height:500, minWidth:300, minHeight:300, layout:'fit', //closeAction:'hide', plain:true, bodyStyle:'padding:5px', iconCls:'form', buttonAlign:'center', items:form, modal:true, buttons:[{//按钮 text:'保存', handler:(function(){//start function按钮处理函数 if(form.getForm().isValid()){ //表单是否通过交验,通过责提交表单,否则弹出错误窗口 form.getForm().submit({ scope:this, waitMsg:'保存数据...', success:function(form,action){ Ext.MessageBox.alert('消息:','保存成功'); this.grid.store.reload(); this.window.close() ; }, failure:function(form,action){ Ext.MessageBox.alert('有错误:', action.result.errors); this.window.close() ; } }); }else{ Ext.MessageBox.alert('有错误:','表单填写由错误!'); } }).createDelegate(this)//end function },{ text:'重置', handler:function(){//start function按钮处理函数 form.getForm().reset(); }//end function }] });//end Ext.Window //显示窗口 this.window.show(); }, /** * 添加列表新数据的函数 */ newInfo:function(){//start newTableInfo this.formWindow(this.getForm(),'添加'); },//end newTableInfo /** * 删除数据,并把此数据的唯一标识码发送到后台 */ handlerDelete:function(){//start deleteRecord this.sendId(this.deleteUrl); },//end deleteRecord sendId:function(url){//start deleteRecord var ids=new Array(); //存放uniqueCode的数组 var records=this.grid.selModel.selections.items; //grid中被选择的数据,类型为Array for(var i = 0, len = records.length; i < len; i++){ ids[ids.length]=records[i].id; //把数据id赋予ids数组中 } Ext.Ajax.request({//调用Ajax发送请求到后台 scope:this, url:url,//删除grid数据的url. success:function(transport){//处理成功后返回的函数 var oXmlDom=transport.responseText; if(oXmlDom!=''){ var content=eval(oXmlDom); Ext.MessageBox.alert("有错误:",content.errors) }else{ this.grid.store.reload();//重新加载grid中的数据 } }, failure:function(){//处理后台删除失败的函数 Ext.MessageBox.alert('消息','删除失败!'); } }); },//end deleteRecord exportExcel:function(){ document.location.href=url; //'http://localhost:8080/chalk/hf/sortManager.do?action=export'; } } 下面是使用前要再加的js,主要是处理一些ext2.0一些效果,不加也可以,不过可能会少些效果 //填充图片的本地应用 Ext.BLANK_IMAGE_URL='../resources/images/default/s.gif'; //在ie中默认的宽度不够 Ext.apply(Ext.MessageBox,{ alert:function(title, msg, fn, scope){ this.show({ title : title, msg : msg, buttons: this.OK, minWidth:200, fn: fn, scope : scope }); return this; } }); Ext.menu.RangeMenu.prototype.icons = { gt: '../resources/extendIamges/greater_then.png', lt: '../resources/extendIamges/less_then.png', eq: '../resources/extendIamges/equals.png' }; Ext.grid.filter.StringFilter.prototype.icon =图片路径 //'../resources/extendIamges/find.png'; /* * 修改filter发送到后台的数据模式. * 例:filter.[i][field]、filter.[i][type]、filter.[i][value]、 filter.[i][comparison]、 * */ Ext.grid.GridFilters.prototype.buildQuery=function(filters){ var p = {}; for(var i=0, len=filters.length; i<len; i++) { var f = filters[i]; var root = [this.paramPrefix, '[', i, ']'].join(''); p[root + '[field]'] = f.field; //修改此处 var dataPrefix = root; for(var key in f.data) { p[[dataPrefix, '[', key, ']'].join('')] = f.data[key]; } } return p; } //添加时间交验函数 Ext.apply(Ext.form.VTypes, { //时间交验属性 daterange: function(val, field) { var date = field.parseDate(val); var dispUpd = function(picker) { var ad = picker.activeDate; picker.activeDate = null; picker.update(ad); }; //debugger; if (field.startDateField) { var sd = field.startDateField; sd.maxValue = date; if (sd.menu && sd.menu.picker) { sd.menu.picker.maxDate = date; dispUpd(sd.menu.picker); } } else if (field.endDateField) { var ed = field.endDateField; ed.minValue = date; if (ed.menu && ed.menu.picker) { ed.menu.picker.minDate = date; dispUpd(ed.menu.picker); } } return true; } }); Ext.QuickTips.init(); 此代码中可能会用到之前的radio和checkbox校代码 这里也随便贴出来 /** * 此js为补充Extjs的chechbox和radio校验 * * checkbox需要添加属性: * showInvalidText:Boolean * 此属性为标识出在那个checkbox后面添加错误图片 * 注意:boxLabel需要两个字符不然图片会合字重叠,可以在字符后加一空格' ' * * radio需要添加属性: * showInvalidText:Boolean * 此属性为标识出在那个radio后面添加错误图片 */ Ext.apply(Ext.form.Checkbox.prototype, { getErrorCt:function(){ return this.el.findParent('.x-form-element', 5, true) || // use form element wrap if available this.el.findParent('.x-form-field-wrap', 5, true); // else direct field wrap } }); Ext.apply(Ext.form.Radio.prototype, { getErrorCt:function(){ return this.el.findParent('.x-form-element', 5, true) || // use form element wrap if available this.el.findParent('.x-form-field-wrap', 5, true); // else direct field wrap } }); function markInvalid(msg){ if (!this.rendered || this.preventMark) { // not rendered return; } this.el.addClass(this.invalidClass); msg = msg || this.invalidText; switch (this.msgTarget) { case 'qtip' : this.el.dom.qtip = msg; this.el.dom.qclass = 'x-form-invalid-tip'; if (Ext.QuickTips) { // fix for floating editors interacting with // DND Ext.QuickTips.enable(); } break; case 'title' : this.el.dom.title = msg; break; case 'under' : if (!this.errorEl) { var elp = this.getErrorCt(); this.errorEl = elp.createChild( { cls : 'x-form-invalid-msg' }); this.errorEl.setWidth(elp.getWidth(true) - 20); } this.errorEl.update(msg); Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this); break; case 'side' : if (!this.showInvalidText) { break; } if (!this.errorIcon) { var elp = this.getErrorCt(); this.errorIcon = elp.createChild( { cls : 'x-form-invalid-icon' }); } this.errorIcon.alignTo(this.el.next(), 'tl-tr', [2, 0]); this.errorIcon.dom.qtip = msg; this.errorIcon.dom.qclass = 'x-form-invalid-tip'; this.errorIcon.show(); this.on('resize', this.alignErrorIcon, this); break; default : var t = Ext.getDom(this.msgTarget); t.innerHTML = msg; t.style.display = this.msgDisplay; break; } this.fireEvent('invalid', this, msg); } function clearInvalid(){ if (!this.rendered || this.preventMark) { // not rendered return; } this.el.removeClass(this.invalidClass); switch (this.msgTarget) { case 'qtip' : this.el.dom.qtip = ''; break; case 'title' : this.el.dom.title = ''; break; case 'under' : if (this.errorEl) { Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this); } break; case 'side' : if (this.errorIcon) { this.errorIcon.dom.qtip = ''; this.errorIcon.hide(); this.un('resize', this.alignErrorIcon, this); } break; default : var t = Ext.getDom(this.msgTarget); t.innerHTML = ''; t.style.display = 'none'; break; } this.fireEvent('valid', this); } function validate(){ var array = this.ownerCt.find('name', this.name); if (this.validateValue(this.processValue(this.getRawValue()))) { for(var i=0;i<array.length;i++){ array[i].clearInvalid(); } return true; } return false; } function validateValue() { if (!this.getGroupValue()) { this.markInvalid(); return false; } return true; } Ext.form.Checkbox.prototype.markInvalid=Ext.form.Radio.prototype.markInvalid = markInvalid; Ext.form.Checkbox.prototype.clearInvalid=Ext.form.Radio.prototype.clearInvalid = clearInvalid; Ext.form.Checkbox.prototype.validate=Ext.form.Radio.prototype.validate = validate; Ext.form.Checkbox.prototype.validateValue=function(){ var array = this.ownerCt.find('name', this.name); for(var i=0;i<array.length;i++){ if(array[i].getValue()){ return true; } } this.markInvalid(); return false; } Ext.form.Radio.prototype.validateValue = validateValue;
发表评论
-
GRID中嵌套表格
2010-05-28 14:05 1603由于需求自己写弄的源代码! 见附件图片 -
关于COMBOX联动的显示文本设置
2010-01-28 17:24 1051今天遇到了从后台返回数据给combox显示的问题,通过网络和朋 ... -
自定义EXT-Form表单验证(密码是否一致)
2009-04-25 19:40 2438//自定义Vtype验证----验证密码是否一致 Ext.a ... -
Ext验证手机和座机
2009-04-25 19:35 1206{ fieldLa ... -
Ext.form.Radio的横向和纵向排列
2009-04-25 19:08 2976横向: 整个Radio Group使用column方式进行 ... -
ExtCombox读Json设置默认值存取
2009-04-25 18:52 2143Ext的Combox说法不一,自己实现了一下,有好的方法请给胖 ... -
extjs验证手机或电话
2009-04-24 20:33 1200Ext.apply( Ext.form.VTypes, ... -
关于Ext.grid.EditorGridPanel的下拉列表框实现
2009-04-24 20:15 34841. 下拉列表需要的数据,根据需要可以到后台去取数据,这 ... -
Ext combox从后台取值
2009-04-24 20:03 1720var RecordDef = Ext.data.Record ... -
Ext初始化配置项iconCls的使用方法
2009-04-24 19:51 1361使用过Ext(http://www.extjs.com ...
相关推荐
ExtJS 是一个强大的JavaScript 框架,专用于...总结,"Ext增删改查和excel导出"涉及到ExtJS中的核心功能,包括数据存储、UI组件、数据交互以及数据导出。掌握这些技能,可以有效地构建高效、功能完备的企业级Web应用。
Ext+2.0+Grid的增删改查.txtExt+2.0+Grid的增删改查.txtExt+2.0+Grid的增删改查.txtExt+2.0+Grid的增删改查.txtExt+2.0+Grid的增删改查.txtExt+2.0+Grid的增删改查.txt
接下来 在mysql里建立 数据库位ext的库 再去项目中 src/META-INF/persistence.xml的配置文件里吧<!-- <property name="hibernate.hbm2ddl.auto" value="update" /> -->这句话的注释去掉 好了 部署项目到tomcat上 ...
这篇博客"Ext Grid 导出Excel"可能详细介绍了如何实现这一功能。 首先,让我们理解Ext Grid的基本工作原理。Ext Grid是Sencha Ext JS框架的一部分,它允许开发者创建可配置的表格视图,可以显示从服务器获取的数据...
"Ext_2.2_API(chinese).rar_Ext 2.2 API_ext js 2_ext-2.2 api_ext2.2",是针对Ext JS 2.2框架的重要参考资料,对于开发者来说尤其有价值,特别是那些中文为母语的开发者,它使得理解框架的功能和用法更加方便。...
标题 "ext2 grid 封装 (包含增删改查 导入导出等操作)" 暗示了这是一个关于ExtJS 2.x版本中Grid组件的封装实践,该封装集成了基本的数据操作功能,如添加(Add)、删除(Delete)、修改(Modify)和查询(Query)...
在实现增删改查功能时,通常会用到以下几个主要的ExtJS组件: 1. 表格(Grid):用于展示数据列表,可以与Ext.data.Store关联,自动处理数据的加载、排序、分页等操作。 2. 表单(Form):用于输入和编辑数据,包含...
简单的EXT 增删改查
总结来说,EXT的增删改查功能强大且灵活,它提供的数据管理机制和用户界面组件使得在前端实现复杂的业务逻辑变得简单。通过这个示例,初学者不仅可以学习EXT的基本用法,还能深入理解前端数据操作和UI交互的设计原则...
EXT2.2 API中文版详细介绍了EXT JS库中各个函数、方法和类的用法,使得开发者可以熟练掌握EXT JS的API,编写出高效且功能丰富的JavaScript代码。 **Java** 虽然EXT2.2主要是JavaScript的框架,但在实际应用中,...
在"Ext左树有表格 增删改查"这个主题中,我们主要关注的是ExtJS如何实现左侧树形结构与右侧表格的交互,以及在这样的布局中进行数据的增、删、改、查操作。 首先,ExtJS中的树形组件(TreePanel)可以用来展示层级...
支持Ext3 Ext4导出excel,客户端导出表格,支持各种主流浏览器。
于是,我就看完了Ext官方网站的介绍,然后把该网站介绍--Ext2.0开发指南完整翻写成了简体中文,并且使用Ext2.2调试出来,因为--该官方网站给出的是Ext 2.0版本,有的代码跑不出来,比如Ext2.2中没有Ext.grid.Grid这...
"ext增删改查.rar" 文件可能包含了EXTJS 进行数据操作的具体代码示例,包括Model、Store、Proxy 的配置以及如何触发增删改查操作的代码片段。解压并研究这些文件可以帮助理解EXTJS 与MySQL 数据库的交互过程。 8. ...
ext 学习资料 网格增删改查 炫酷的效果ext 学习资料 网格增删改查 炫酷的效果
在这个"EXT简单的增删改查"项目中,开发者利用EXTJS与SQLServer数据库相结合,实现了基本的数据管理功能,包括添加(Add)、删除(Delete)、修改(Update)和查询(Query)。 1. EXTJS的基本概念: - 组件...
首先,EXT Grid提供了一个内置的导出功能,但默认情况下,它并不直接支持导出为Excel文件。要实现这个功能,我们需要使用一些额外的库或方法。描述中提到的"还需做相应的修改",指的是我们需要自定义代码来完成这个...
"admin"可能是应用程序的管理界面目录,包含用于执行增删改查操作的EXT.NET控件,如GridPanel、FormPanel等。这些控件可以绑定到数据源,并通过EXT.NET的事件处理机制(如button的click事件)调用后台的C#方法执行...
**Spring MVC + EXT JS 开发简单的增删改查入门实例** 在Web开发中,Spring MVC作为Spring框架的一部分,被广泛用于构建后端服务,而EXT JS则是一款强大的前端JavaScript库,用于创建美观、交互丰富的用户界面。将...
在EXTJS这个强大的JavaScript框架中,实现导出Excel功能是一项常见的需求。EXTJS提供了一种高效的方法来将数据导出到Excel格式,使得用户能够方便地处理和分析数据。在这个场景下,我们可以从以下几个关键知识点入手...