`
starbhhc
  • 浏览: 654792 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Ext2.0的通用grid包括(增、删、改、查、导出excel)

阅读更多
下面为扩张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',                 //删除按钮的名称
            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属性要与<br>
     * 从后台读取的字段要一致
     */
    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的属性值<br>
     * 赋予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
     * 必须含有下列参数:<br>
     * loadingEL        {String}    加载页面时显示的内容id<br>
     * loadingMaskEl    {String}    渐显的内容id<br> 
     */ 
    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='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;
分享到:
评论

相关推荐

    Ext+2.0+Grid的增删改查.txt

    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

    EXT2.0 GRID 示例

    文档"document"可能包含了EXT2.0 GRID的详细配置、使用方法、示例代码等,对于理解和使用EXT GRID组件至关重要。通过深入学习这个文档,你可以掌握EXT GRID的基本用法和高级特性,从而在项目中构建出功能强大的数据...

    Ext Demo grid的增删改查例子

    接下来 在mysql里建立 数据库位ext的库 再去项目中 src/META-INF/persistence.xml的配置文件里吧&lt;!-- &lt;property name="hibernate.hbm2ddl.auto" value="update" /&gt; --&gt;这句话的注释去掉 好了 部署项目到tomcat上 ...

    Ext增删改查和excel导出

    ExtJS 是一个强大的JavaScript 框架,专用于...总结,"Ext增删改查和excel导出"涉及到ExtJS中的核心功能,包括数据存储、UI组件、数据交互以及数据导出。掌握这些技能,可以有效地构建高效、功能完备的企业级Web应用。

    Ext Grid 导出Excel

    总结来说,"Ext Grid 导出Excel"这个话题涵盖了从JavaScript数据结构到Excel文件格式转换的过程,涉及到的主要技术有Ext JS的Grid和Store组件,以及第三方库SheetJS。这个过程对于那些需要提供数据导出功能的Web应用...

    通用grid 增、删、改、查、导出excel

    Ext2_0的通用grid包括(增、删、改、查、导出excel) - Winner_Net@2007 - 博客园.mht

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

    标题 "ext2 grid 封装 (包含增删改查 导入导出等操作)" 暗示了这是一个关于ExtJS 2.x版本中Grid组件的封装实践,该封装集成了基本的数据操作功能,如添加(Add)、删除(Delete)、修改(Modify)和查询(Query)...

    最新的ext2.0下载

    在压缩包中的"ext2"文件可能包含了EXT2.0的源码、示例代码、文档和其他相关资源,这将帮助开发者快速理解和使用EXT2.0框架。通过深入研究这些文件,开发者可以掌握EXT2.0的架构原理,理解其组件工作方式,进而高效地...

    EXT2.0 带无限极树的 增删改差 是用jsp+servlet+ext2.0实现的

    实现增删改查操作,我们需要在Servlet中编写对应的方法: 1. **添加(Add)**:EXT2.0通过AJAX请求将新的数据节点发送到Servlet,Servlet接收到数据后,利用JDBC(Java Database Connectivity)与数据库进行交互,...

    ext-2.0 ext-2.0 ext-2.0 ext-2.0 ext-2.0

    ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0

    ext2.0(jsp标签)

    在EXT 2.0的压缩包文件"ext-2.0"中,可能包含了EXT库的JavaScript文件、CSS样式文件、图像资源以及示例代码等,开发者可以通过这些资源学习EXT 2.0的使用方法,快速上手并创建自己的富互联网应用。通过深入理解和...

    ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记

    ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记ext2.0笔记...

    Ext grid导出excel

    支持Ext3 Ext4导出excel,客户端导出表格,支持各种主流浏览器。

    Ext左树有表格 增删改查

    在"Ext左树有表格 增删改查"这个主题中,我们主要关注的是ExtJS如何实现左侧树形结构与右侧表格的交互,以及在这样的布局中进行数据的增、删、改、查操作。 首先,ExtJS中的树形组件(TreePanel)可以用来展示层级...

    ext与数据交互增删改查大全

    "ext增删改查.rar" 文件可能包含了EXTJS 进行数据操作的具体代码示例,包括Model、Store、Proxy 的配置以及如何触发增删改查操作的代码片段。解压并研究这些文件可以帮助理解EXTJS 与MySQL 数据库的交互过程。 8. ...

    ext 学习资料 网格增删改查 炫酷的效果

    ext 学习资料 网格增删改查 炫酷的效果ext 学习资料 网格增删改查 炫酷的效果

    EXT 增删改查的一个例子

    EXT的表格组件(Ext.grid.Panel)支持行级别的编辑,结合行选择器和表单组件,可以方便地实现增删改查操作。表单组件(Ext.form.Panel)用于收集用户输入,并能与数据模型关联,实现数据的双向绑定。 在这个例子中...

    ext2.0官方文档

    3. **inode**:在EXT2.0中,inode(文件元数据)包含文件的所有信息,如文件大小、权限、修改时间等。每个文件或目录都关联一个唯一的inode号。 4. **快速分配**:EXT2.0引入了快速分配策略,允许文件系统在创建...

    简单的EXT 增删改查

    简单的EXT 增删改查

    ext.net与ADO.NET增删改查操作

    "admin"可能是应用程序的管理界面目录,包含用于执行增删改查操作的EXT.NET控件,如GridPanel、FormPanel等。这些控件可以绑定到数据源,并通过EXT.NET的事件处理机制(如button的click事件)调用后台的C#方法执行...

Global site tag (gtag.js) - Google Analytics