• 关于Ext3.0中按条件查询并重新加载Grid中的数据的实现过程及store.load的分析


      这个问题一直困扰了我好久,前后大概持续有一个月的时间,因为是完全自学Ext,如果请教他人估计早就解决了,但庆幸的是今天终于被我解决了!

    刚开始学习Ext完全是看视频跟着敲,看完了自己想试着做点什么?原来做了个简单的《收入支出管理》,就把他改成Ext元素的吧,开始动手,大概是一个多月前吧,别的都好说,就是到了这个通过时间段查询并重新加载grid中的数据的时候卡住了,原来好像想使用ComboBox嵌入Ajax,找了好久没找着,而且后来发现那个ComboBox并不合适,后来就没有再弄下去了,当然这个加载问题也一直存在……1天、2天、3天、、、过年了……

      过年来了,到了实习单位,还是没事干,那就还是自己找点事儿吧,感觉上次看的那些Ext视频早忘的差不多了,后来就决定重新深层次学习一把,《深入浅出ExtJS(第2版)》,!

    看了四章,感觉也能做点东西了,于是乎、想起了去年没完成的那个小项目,但是这次感觉用那个ComboBox并不好,还是使用时间控件比较好,而且时间格式固定方便选择,开动!

    先写后台,增加了按条件查询的接口,可以传递条件参数和分页参数,刚开始是布局,然后就是加载数据,这些都很快实现了,又到了那个查询重新加载的难题,各种尝试,又是添加监听器时间久有时添加baseParam属性,但是找了好几天网上还真没具体的配置方法,但查到最后,还是感觉baseParam比较靠谱,然后就开始google “baseParam的配置”,最终在http://blog.sina.com.cn/s/blog_c3b8edc40101abm4.html中找到了答案,如下:

    需要刷新数据,可以使用reload方法,其使用方法参考load方法。

    在加载数据时,如果要修改提交参数,可使用baseParams属性设置,其使用方法如下:

    store.baseParams.page=1;
    store.load();

    也可以使用setBaseParam方法,其使用方法如下:

    store.setBaseParam('page',1);
    store.load();

    当然,也可以直接在load方法里当参数传递,其使用方法请看前面的load方法介绍。,

    这就明了多了,后来经过一番尝试,终于实现了,具体的解析都放到对应的语句上边了,那么……上代码!

    Ext.onReady(function() {
        var cm = new Ext.grid.ColumnModel([ {
            header : '收入类型',
            dataIndex : 'income_code'
        },// sortable为true设置按列排序
        {
            header : '时间',
            dataIndex : 'income_date',
            sortable : true,
            type : 'date',
            width : 200,
            renderer : Ext.util.Format.dateRenderer('Y年m月d日')
        },
    
        {
            header : '人员',
            dataIndex : 'income_person'
        },
        // 定义表格中显示时间格式
        {
            id : 'income_money',
            header : '金额',
            dataIndex : 'income_money',
            sortable : true
        },
        {
            id : 'income_content',
            header : '备注',
            dataIndex : 'income_content',
            width : 200
        } ]
        );
        
        var store = new Ext.data.Store({
            proxy : new Ext.data.HttpProxy({
                url : 'SelectIncomeForJson',
            }),
            /*baseParams: {
                start:0,
                limit:10,
                   starttime: '',
                   endtime: ''
                },*///baseParams   这个配置不是必须的,只要在重新加载或加载前设置即可
            reader : new Ext.data.JsonReader({
                totalProperty : 'totalProperty',
                root : 'incomeList'
            }, [ {
                name : 'income_code'
            }, {
                name : 'income_date'
            }, {
                name : 'income_person'
            }, {
                name : 'income_money'
            }, {
                name : 'income_content'
            } ])
                /*,//这个事件监听也没有必要,因为在点击查询按钮时手动设置了store的参数
            listener:function(){
                this.store.on('beforeload', function(store,options)
                        {
                        var new_params = {
                        start : 0,
                        limit : 20,
                        starttime : starttime,
                        endtime : endtime
                    };
                    Ext.apply(options.params, new_params);
                });
            }*/
        });
        
        var form = null;
        var grid=null;
        grid= new Ext.grid.GridPanel({
            title : 'ArrayGrid',
            store : store,
            cm : cm,
            renderTo : 'grid',
            stripeRows : true,// 设置斑马线表格
            frame : true,// 设置表格为panel中的一个frame
            autoHeight : true,
            width : 700,
    
            tbar : [ {
                text : '回到顶部',
                handler : function() {
                    grid.getView().scrollToTop();
                }
            }, {} ],
            bbar : [ new Ext.PagingToolbar({
                pageSize : 10,
                store : store,
                displayInfo : true,
                displayMsg : '显示第{0}条到第{1}条',
                emptyMsg : "没有记录"
            }) ],
    
            item : [ form = new Ext.form.FormPanel({
                labelAlign : 'left',
                labelWidth : 50,
                method : 'post',
                //url : 'SelectIncomeForJson?start=0&limit=10',
                width : 700,
                renderTo : 'form',
                frame : true,
                items : [ {
                    // layout : 'column',
                    items : [ {
                        columnWidth : 1,
                        /*
                         * 此处两个属性构造一个field集合,使用边框围起来,若不使用则是一个普通面板标题,应用中很常用
                         */
                        xtype : 'fieldset',
                        checkboxToggle : true,
                        title : '筛选条件',
                        autoHeight : true,
                        defaults : {
                            width : 600
                        },
                        // defaultType : 'textfield',//该type为全局,而单个item中的xtype便是局部变量
                        items : [ {
                            xtype : 'datefield',
                            id:'starttime',
                            fieldLabel : '起始:',
                            name : 'starttime',
                            width : 150,
                            emptyText : '请选择',//若希望不选择时间时单击按钮不会产生空列表,则需将该配置去掉,或者在action中添加判断
                            format : ('Y-m-d')
                        }, {
                            xtype : 'datefield',
                            id:'endtime',
                            fieldLabel : '截止:',
                            name : 'endtime',
                            width : 150,
                            emptyText : '请选择',
                            format : ('Y-m-d')
                        }, {
                            xtype : 'button',
                            width : 150,
                            text : '查询',
                            handler : function() {
                                //form.getForm().submit();//这个提交操作没有起作用,但是只需要下边的组合就可以完成刷新数据的功能
                                // alert("变量starttime"+starttimeparam);
                                
                                grid.getStore().baseParams.starttime=starttime.value;
                                
                                //grid.getStore().setBaseParam('starttime',starttime.value);//starttime为控件的id值,可以尝试注释id后,将无法获得
                                grid.getStore().setBaseParam('endtime',endtime.value);
                                /*
                                 * 以上设置暂且没有找到组合设置的方法,只能单个了
                                 * */
                                /*此处为组合配置,但是应该需要在创建store时声明,没有看到想要的结果
                                 * grid.getStore().baseParams = {
                                        start:0,
                                        limit:10,
                                        startime:starttime.value,
                                        endtime:endtime.value//name为之前定义的变量
                                    };*/
                                
                                grid.getStore().reload();//此处可以写成reload,也可写成load()
                                /*如果写成reload,那么则会重新提交原来store中的url请求,当然load也是,不管你form中有没有定义新的url,而使用submit则会调用配置的url
                                 * 对于reload来说,仍然保留原来Param中配置的参数,但是使用load的话,将不会保留,
                                 * (比如我在创建时都不声明,但是在第一次加载时配置params,那么在此处使用reload则会保留params,但在使用load时,将会清楚该params,)
                                 * 而且在store的创建函数中定义baseParam与否并不影响重载时自己重新设置新的参数,也就是说不用提前声明,直接设定即可,
                                 * 无论使用哪种方法只要'有'即可
                                 * */
                                // alert("starttime"+starttime.value);
                            }
                        } ]
                    } ],
    
                } ]
            }) ]
        });
        store.load({
            params : {
                start : 0,
                limit : 10/*,//该处命令是在初次加载页面时加载的参数和reload时的参数,因为没有查询参数,故将其注销,实现无条件查询,
                //添加以后也不能正常显示无条件结果,因为此处并不能够读取到starttime,
                starttime:starttime.value,
                endtime:endtime.value*/
            }
        });
    
    });

    最终结果:选择起始终止时间,点击查询,ok!

    不要看内容哦~

  • 相关阅读:
    (转)AJAX开发中常用的Firefox Plugins
    几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
    Excel Oledb设置
    统计数据库中所有表的基本信息
    sql 分页加排序等写法
    sql 创建索引
    SQL Server复制需要有实际的服务器名称才能连接到服务器 错误解决方案
    转转:解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系。"
    Reflector7.5.2.1的Bug
    查询数据库所有依赖
  • 原文地址:https://www.cnblogs.com/mecca/p/3569264.html
Copyright © 2020-2023  润新知