Ext Js简单Grid分页及选择器的使用

1.Ext Js的GridPanel的分页处理
对于数据处理的组件GridPanel可能会用到它的分页处理功能,对于GridPanel的分页处理需要加上Ext.PagingToolbar对象来对数据进行分页处理。
Ext Js的前台代码:
(对于GridPanel的分页处理,还添加了对于数据的增、删、改操作,这次的添加、修改操作是使用的Window弹出框处理的,加载一条记录,提交表单保存一条记录;删除操作还是上篇的删除代码,没有修改;又增加了对于一条记录的上移、下移操作,是将一条选中的记录取出来,获取其索引,然后删除该记录,在指定位置(上移一条记录或下移一条记录)插入该记录。对于后台的相应还是前一篇文章的.ashx文件,对应与GetPagingData\SaveSingle\DeleteData的AJAX操作。)

Ext.onReady(function () {
    gridAjaxPaging();
});

function gridAjaxPaging() {
    var pageSize = 2; //分页页大小
    var checkSelModel = new Ext.grid.CheckboxSelectionModel(); //单行选中singleSelect\checkOnly复选框选中
    var cm = new Ext.grid.ColumnModel([//设置列的结构
            new Ext.grid.RowNumberer(), //行号,也可加入配置{ header: '行号', width: 35 }
            checkSelModel, //checkbox显示
            {header: '学生ID', dataIndex: 'StuID', align: 'center', width: 80 }, //align: 'center',列和内容居中
            {header: '学生姓名', dataIndex: 'StuName' },
            { header: '学生年龄', dataIndex: 'StuAge'},
            { header: '学生性别', dataIndex: 'StuSex' },
            { header: '学生描述', dataIndex: 'StuDesp'},
            { header: '入学日期', dataIndex: 'StuDate' }
            ]);

    var ds = new Ext.data.JsonStore({//设置数据绑定
        url: 'TestGridAjax.ashx', //请求地址
        root: 'Datas', //要显示数据的根
        totalProperty: 'TotalCount', //总记录数
        baseParams: { Option: 'GetPagingData', start: 0, limit: pageSize }, //传值参数,start\limit初次加载显示记录区间
        fields: ['StuID', 'StuName', 'StuAge', 'StuSex', 'StuDesp', 'StuDate']//绑定字段
    });
    ds.load();
    //对于store的load\reload可以在任何需要的地方进行配置,如:{ params: { Option: 'GetPagingData', start: 0, limit: 3} }//Option:'GetData'
    //可能第一次加载是全部信息,在某处需要分页操作,或显示指定的数据

    var gridAjax = new Ext.grid.GridPanel({//可编辑GridPanel
        width: 800, height: 500, renderTo: Ext.getBody(),
        style: { marginLeft: 100, marginTop: 100 },
        store: ds, //数据
        colModel: cm, //列显示结构
        sm: checkSelModel,
        loadMask: true, stripeRows: true, autoExpandColumn: 'StuDesp', //设置一列自动填充剩余部分
        clicksToEdit: 2, //双击触发修改
        tbar: new Ext.Toolbar([
                    { text: '添加', handler: function () {
                        var record = new Ext.data.Record({ StuID: '0', StuName: '', StuAge: 10, StuSex: '男', StuDesp: '', StuDate: new Date().format('Y-m-d H:m:s') });
                        addAndUpdateData('add', record, ds); //添加,也可以指定一条记录的默认值
                    }
                    }, '-',
                    { text: '修改', handler: function () {
                        if (gridAjax.selModel.getCount() > 0) {
                            var record = gridAjax.selModel.getSelected();
                            addAndUpdateData('update', record, ds);
                        } else {
                            Ext.MessageBox.alert('信息提示', '请选择你要修改的记录!');
                        }
                    }
                    }, '-', //修改操作
                    {text: '删除', handler: function () {//删除操作
                        Ext.MessageBox.confirm('信息提示', '你确定要删除吗?', function (btn) { if (btn == 'yes') { delData(gridAjax); } });
                    }
                }, '-',
                    { text: '上移', handler: function () { upRecord(gridAjax); } }, '-',
                    { text: '下移', handler: function () { downRecord(gridAjax); } }
                ]),
        bbar: new Ext.PagingToolbar({ store: ds, pageSize: pageSize, displayInfo: true, displayMsg: '显示{0}-{1}条记录,共{2}条', emptyMsg: '没有记录' })
    });
}

function addAndUpdateData(type, record, ds) {//数据处理类型:add\update
    var win = new Ext.Window({
        title: 'Window Title', width: 300, height: 500, layout: 'form', renderTo: Ext.getBody(),
        items: [//form表单创建一些组件对象集合
                    {xtype: 'form', id: 'formSubmit', labelWidth: 50, labelAlign: 'right', border: false,
                    bodyStyle: 'padding:10px', defaults: { width: 200 },
                    items: [
                        { xtype: 'textfield', fieldLabel: 'StuID', name: 'StuID' },
                        { xtype: 'textfield', fieldLabel: 'StuName', name: 'StuName' },
                        { xtype: 'numberfield', fieldLabel: 'StuAge', name: 'StuAge' },
                        { xtype: 'combo', fieldLabel: 'StuSex', name: 'StuSex', mode: 'local', displayField: 'Value', valueField: 'Id', editable: false,
                            triggerAction: 'all', autoSelect: true, forceSelection: false, store: new Ext.data.SimpleStore({ fields: ['Id', 'Value'], data: [['1', '男'], ['2', '女']] })
                        },
                        { xtype: 'textfield', fieldLabel: 'StuDesp', name: 'StuDesp' },
                        { xtype: 'datefield', fieldLabel: 'StuDate', name: 'StuDate', format: 'Y-m-d H:m:s', editable: false }
                        ],
                    buttons: [
                        { text: '保存', handler: function () {
                            win.get(0).getForm().submit({
                                clientValidation: true, //进行客户端验证
                                url: 'TestGridAjax.ashx',
                                params: { Option: 'SaveSingle' },
                                success: function (form, action) { win.close(); ds.reload(); Ext.MessageBox.alert('信息提示', action.result.Msg); },
                                failure: function (form, action) { Ext.MessageBox.alert('信息提示', action.result.Msg) }
                            });
                        }
                        },
                        { text: '重置', handler: function () { win.get(0).getForm().reset(); } },
                        { text: '取消', handler: function () { win.close(); } }
                    ]
                }
            ]
    }).show();
    win.get(0).getForm().loadRecord(record); //加载单条记录,这里很不错
}

//删除操作和前一个一样,一点没修改
function delData(gridAjax) {//删除数据(实现单行\多行记录删除)
    if (gridAjax.selModel.getCount() > 0) {//获取选中的行总数
        //var record = gridAjax.selModel.getSelected(); //获取选中的单条记录
        var records = gridAjax.selModel.getSelections(); //获取选中的所有记录
        var stuIDS = ""; //要删除学生ID集合
        for (var i = 0; i < records.length; i++) {
            stuIDS += records[i].data.StuID + ",";
        }
        if (stuIDS.indexOf(',')) { stuIDS = stuIDS.substring(0, stuIDS.lastIndexOf(',')); } //去掉最后一个","

        Ext.Ajax.request({
            method: 'POST', //请求方式大小写敏感
            url: 'TestGridAjax.ashx',
            params: { Option: 'DeleteData', JsonData: stuIDS },
            success: function (response, options) {//执行成功
                gridAjax.store.remove(records); //数据库删除成功,前台删除选中的所有记录
                gridAjax.reconfigure(gridAjax.store, gridAjax.colModel); //绑定对象并刷新
                Ext.MessageBox.alert('信息提示', Ext.util.JSON.decode(response.responseText).Msg); //获取后台返回的Json数据Msg键的值
            },
            failure: function (response, options) { Ext.MessageBox.alert('信息提示', Ext.util.JSON.decode(response.responseText).Msg); }
        });
    }
    else {
        Ext.MessageBox.alert('信息提示', '请选择你要删除的数据!');
    }
}

function upRecord(gridAjax) {//记录上移
    if (gridAjax.selModel.getCount() > 0) {
        var record = gridAjax.selModel.getSelected(); //获取当前选中记录
        var index = gridAjax.store.indexOf(record); //获取当前记录所在索引
        if (index > 0) {
            gridAjax.store.removeAt(index); //将选中的该行删除
            gridAjax.store.insert(index - 1, record); //在改行上一行处插入该记录
            gridAjax.getView().refresh(); //刷新一下,主要刷新行号
            gridAjax.selModel.selectRow(index - 1); //新插入一行被选中
        } else {
            Ext.MessageBox.alert('信息提示', '已是最顶部记录,不能再移动了!');
        }
    }
}

function downRecord(gridAjax) {//记录下移
    if (gridAjax.selModel.getCount() > 0) {
        var record = gridAjax.selModel.getSelected(); //获取当前选中记录
        var index = gridAjax.store.indexOf(record); //获取当前记录所在索引
        if (index < gridAjax.store.getCount() - 1) {
            gridAjax.store.removeAt(index); //将选中的该行删除
            gridAjax.store.insert(index + 1, record); //在改行下一行处插入该记录
            gridAjax.getView().refresh(); //刷新一下,主要刷新行号
            gridAjax.selModel.selectRow(index + 1); //新插入一行被选中
        } else {
            Ext.MessageBox.alert('信息提示', '已是最底部记录,不能再移动了!');
        }
    }
}

2.Ext Js的DomQuery选择器:
发现内容有些少,简单写一下对于Ext Js的DomQuery选择器(有些类似于JQuery的选择器),也是一些常用的选择器,基础选择器,根据对象ID、元素名称、css类选择器、层次选择器、节点便利选择器、还有伪选择器等等。还有一些类似JQuery的动画特效等等,Ext Js的封装的也挺不错的。

//测试淡出淡隐
            //            var myDiv = Ext.get("myDiv");
            //            myDiv.highlight();
            //            myDiv.addClass("Purple");
            //            myDiv.center();
            //            myDiv.setOpacity(0.5);

            //            Ext.getCmp("btnOk").on("click", function () {
            //                var divShow = Ext.get("divMsg");
            //                divShow.load({
            //                    url: "",
            //                    params: 'name=' + Ext.get("txtUserName").dom.value,
            //                    text: "Updating......"
            //                });
            //                divShow.show();
            //            });

            //DomQuery(ExtJs实现对于对象的查询操作)

            //Ext.query("span");//这是包含span的标签的所有元素的数组
            //Ext.query("span","span1");//这是查询所有的span标签数组,返回id为"span1"的对象
            //Ext.query("#span1");//根据id查询一个对象数组,使用“#”号,查询使用该ID的对象
            //Ext.query(".sp");//根据样式为sp的查询一组对象,使用“.”号,查询该样式的所有对象
            //Extt.query("*");//返回一个数组,包含文档的所有元素
            //Ext.query("div p");//按照指定的显示层级来显示所有的符合对象集合
            //属性选择器
            //Ext.query("*[class=bar]");//得到class等于“bar”的所有元素
            //Ext.query("*[class!=bar]");//得到class不等于“bar”的所有元素
            //Ext.query("*[class^=b]");//得到class从“b”字头开始的所有元素
            //Ext.query("*[class$=r]");//得到class由“r”结尾的所有元素
            //Ext.query("*[class*=a]");//得到在class中抽出“a”字符的所有元素
            //样式选择器
            //Ext.query("*{color=red}");//获取所有红色的元素 
            //Ext.query("*{color=red} *{color=pink}");//获取所有粉红颜色的并且是有红色子元素的元素 
            //Ext.query("*{color^=yel}");//获取所有颜色属性是从“yel”开始的元素
            //Ext.query("*{color$=ow}"); //获取所有颜色属性是以“ow”结束的元素
            //Ext.query("*{color*=ow}"); //获取所有颜色属性包含“ow”字符的元素
            //伪类选择符Pseudo Classes selectors 
            //Ext.query("span:first-child");
            //Ext.query("a:last-child");
            //Ext.query("li:nth-child(even)");
            //Ext.query("a:only-child");
            //Ext.query("input:checked"); 

 

posted @ 2013-01-27 20:47  SanMaoSpace  阅读(2593)  评论(0编辑  收藏  举报