`
wxiaoneng
  • 浏览: 8476 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

使用Ext的Grid,Form,Dialog来实现分页列表,创建,修改,删除功能

 
阅读更多
简介:这篇文章将告诉你如何使用Ext中的Grid,Form,Dialog来实现列表,创建,更新,删除,查找和分页功能

参考:http://extjs.com/learn/Tutorial:Using_Ext_grid_form_dialog_to_achieve_paging_list,_create,_edit,_delete_function

作者:puras

签于现在网上多数的Form的例子都多数是描述前台UI的,而没有对与服务端通讯的部分,故参考EXTJS的一个指南,写下此文,希望能对大家有所帮助.

在WEB应用中,大部分的页面都可以被分为:列表,创建,读取,更新,删除.在Ext的文档中心提供了一个非常好的例子,一个行内编辑的表格.然而,在现实中,行内编辑的表格是远远不够的,还需要用不同的方式来展示表单.下面的例子中向你展示如何在表格中创建/更新一个对话框表单.

列表功能

首先是是一个权限列表页,它包含分页,查询/过滤功能,创建和删除功能.

先定义数据源:

this.ds = new Ext.data.Store({
                    proxy : new Ext.data.HttpProxy({ url : '/wit/data.shtml' }), //'/wit/data.shtml' 一个读取数据列表的Action
                    reader : new Ext.data.JsonReader({ //使用JSON传输入数据
                        root : 'roleList',
                        totalProperty : 'totalCount',
                        id : 'id'
                    },
                    // 定义字段映射
                    [
                        {
                            name : 'id',
                            mapping : 'id',
                            type : 'string'
                        },
                        {
                            name : 'name',
                            mapping : 'name',
                            type : 'string'
                        },
                        {
                            name : 'description',
                            mapping : 'description',
                            type : 'string'
                        },
                        {
                            name : 'createDate',
                            mapping : 'createDate',
                            type : 'string'
                        },
                        {
                            name : 'updateDate',
                            mapping : 'updateDate',
                            type : 'string'
                        }
                    ]),
                    remoteSort : true
                });
                this.ds.load({ params:{ start : 0, limit : 20 } });

指定数据的来源位置,解析的方式,以及字段的映射.

接下来是表格中表头的定义,匹配上面的字段:

this.cm = new Ext.grid.ColumnModel([
                    {
                        header : '#',
                        dataIndex : 'id',
                        width : 30,
                        sortable : 1
                    },
                    {
                        header : '名称',
                        dataIndex : 'name',
                        width : 140,
                        sortable : 1
                    },
                    {
                        header : '描述',
                        dataIndex : 'description',
                        width : 140,
                        sortable : 1
                    },
                    {
                        header : '创建日期',
                        dataIndex : 'createDate',
                        width : 150,
                        sortable : 1
                    },
                    {
                        header : '修改日期',
                        dataIndex : 'updateDate',
                        width : 150,
                        sortable : 1
                    }
                ]);

再定义一下Grid:

this.grid = new Ext.grid.Grid('htmlGridPanel', {
                    ds : Grid.ds,
                    cm : Grid.cm,
                    enableColLock : false,
                    autoSizeColumns : true,
                    loadMask : true
                });
                this.grid.render();

现在,就可以看到简单的表格了.功能还有待完善.

接下来,在表格的头部面板处,添加过滤/查询的下拉菜单:

this.gridHead = this.grid.getView().getHeaderPanel(true);
                this.toolbar = new Ext.Toolbar(this.gridHead);
                this.filterBtn = new Ext.Toolbar.MenuButton({
                    icon : '../images/class.gif',
                    cls : 'x-btn-text-icon',
                    text : '选择过滤器',
                    tooltip : '选择一个过滤器',
                    menu : { items : [
                        new Ext.menu.CheckItem({ text : '编号', value : 'id', checked : true, group : 'filter', checkHandler : this.onItemCheck}),
                        new Ext.menu.CheckItem({ text : '名称', value : 'name', checked : false, group : 'filter', checkHandler : this.onItemCheck}),
                        new Ext.menu.CheckItem({ text : '描述', value : 'description', checked : false, group : 'filter', checkHandler : this.onItemCheck})
                    ]},
                    minWidth : 105
                });               
                this.toolbar.add(this.filterBtn);       
                this.filter = Ext.get(this.toolbar.addDom({
                    tag : 'input',
                    type : 'text',
                    size : '30',
                    value : '',
                    style : 'background : #F0F0F9;'
                }).el);
                this.filter.on('keypress', function(e) {
                    if (e.getKey() == e.ENTER && this.getValue().length > 0) {
                        Grid.ds.load({ params : { start : 0, limit : 20 }});
                    }
                });   

在表格的底部面板添加分页,添加,删除按钮:

this.gridFoot = this.grid.getView().getFooterPanel(true);               
                this.paging = new Ext.PagingToolbar(this.gridFoot, this.ds, {
                    pageSize : 20,
                    displayInfo : true,
                    displayMsg : '共有 {2} 条记录.当前显示 {0} - {1}条记录.',
                    emptyMsg : '没有记录!'
                });
                this.paging.add('-', {
                    pressed : true,
                    enableToggle : true,
                    text : '添加',
                    cls : '',
                    toggleHandler : this.doAdd
                });
                this.paging.add('-', {
                    pressed : true,
                    enableToggle : true,
                    text : '删除',
                    cls : '',
                    toggleHandler : this.doDel
                });

在分页中,你需要在从服务器端加载数据之前发送过滤的字段和值:

this.ds.on('beforeload', function() {
                    Grid.ds.baseParams = {
                        filterValue : Grid.filter.getValue(),
                        filterTxt : Grid.filterBtn.getText()
                    };
                });
从服务器端返回的列表的JSON结果如下:

{"roleList":[{"id":21,"description":"description21","name":"puras21","createDate":"Fri Sep 07 15:54:44 CST 2007","updateDate":"Fri Sep 07 15:54:44 CST 2007"},{"id":40,"description":"description40","name":"puras40","createDate":"Fri Sep 07 15:54:44 CST 2007","updateDate":"Fri Sep 07 15:54:44 CST 2007"}],"totalCount":2}

删除

删除方法如下:

doDel : function() {
                var c = Grid.grid.getSelections();
                if (c.length > 0)
                    Ext.MessageBox.confirm('消息', '确认要删除所选记录?', Grid.doDelProc);
                else
                    Ext.MessageBox.alert('警告', '最少需要选择一条记录!');   
            },
            doDelProc : function(btn) {
                if (btn == 'yes') {
                    if (Grid.grid.getSelectionModel().hasSelection()) {
                        var ids = new Array();
                        var records = Grid.grid.getSelectionModel().getSelections();
                        for (var i = 0, len = records.length; i < len; i++) {
                            ids[ids.length] = records[i].id;
                        }
                        Ext.lib.Ajax.request(
                            'GET',
                            '/wit/delete.shtml?ids=' + ids,
                            {
                                success : Grid.onSuccess,
                                failure : function(form, action) { Ext.MessageBox.alert('消息', '删除失败!');}
                            },
                            null
                        );
                    }
                }
            },
            onSuccess : function(o) {
                var response = function(json) {
                    try {
                        return eval('(' + json + ')');
                    } catch(e) {}
                    return null;
                }(o.responseText);
                if (response.failure && response.failure == true) {
                    Ext.MessageBox.alert('消息', response.info);
                }
                Grid.ds.reload();
            }

通过Ajax的形式提交到服务器端.如果删除失败,则将失败信息显示给用户.onSuccess可以用于添,删,改三个功能的处理.返回的JSON数据结构如下:

"{success : true, info : '删除成功!'}"

未完待续......

分享到:
评论

相关推荐

    ext3.0所有控件演示代码

    通过`Ext.grid.GridPanel`创建表格,设置`store`来绑定数据,利用`columns`定义列配置。此外,还可以实现行选择、行编辑、行拖放等功能,提升用户体验。 2. 表单(Form):EXT3.0的表单组件允许开发者创建复杂的...

    Extjs的学习资料

    2. **使用Ext的Grid, Form, Dialog来实现分页列表、创建、修改、删除功能**: - Grid:展示数据,支持分页、排序、选择行等操作。 - Form:用于数据输入和编辑,可以包含各种表单字段,如文本框、复选框、下拉框等...

    Ext 3.0中文手册及帮助文档

    1. Grid Panel:Ext 3.0中的Grid Panel是一个强大的表格组件,支持数据分页、排序、过滤和编辑等功能。 2. Form Panel:用于创建复杂的表单,支持各种表单元素,如文本框、下拉框、复选框等,并有强大的验证机制。 3...

    很绚丽的EXT例子(功能还蛮多的)

    3. **EXT Window和Dialog**:EXT的窗口(Window)和对话框(Dialog)组件可以创建浮动的弹出视图,常用于警告、确认或提供额外信息。它们可能带有动画效果和可调整大小的特性。 4. **EXT Tree**:EXT的树形组件...

    EXT2.0中文教程

    4.1. 不用ext的form啊,不怕错过有趣的东西吗? 4.2. 慢慢来,先建一个form再说 4.3. 胡乱扫一下输入控件 4.4. 起点高撒,从comboBox往上蹦 4.4.1. 凭空变出个comboBox来。 4.4.2. 把select变成comboBox。 4.4.3. ...

    Ext的图书管理系统

    "Ext的图书管理系统"显然利用了ExtJS的强大功能,为用户提供了一个直观且美观的界面来管理和操作图书数据。在这个系统中,用户可以轻松地进行图书的添加、删除、修改以及查询等操作,极大地提高了图书管理的效率。 ...

    官方Ext3.0实例包

    1. 表格(Grid):展示大量数据的表格组件,支持分页、排序、过滤、编辑等功能。 2. 表单(Form):用于数据输入和展示,支持多种表单控件和验证机制。 3. 面板(Panel):基本的容器组件,可以包含其他组件,常...

    ext 自动生成器自动生成组件

    1. 表格(Grid):自定义列、排序、过滤、分页等功能的表格视图。 2. 表单(Form):生成包含各种输入字段(文本、日期、选择框等)的表单。 3. 树形视图(Tree):用于展示层次结构数据的组件。 4. 图表(Charts)...

    非常好的gwt-ext培训教程

    1. **表格(Grid)**: 支持排序、分页和过滤功能,便于数据管理和展示。 2. **树形视图(Tree)**: 具备拖拽功能,方便组织和操作层次结构的数据。 3. **组合下拉框(Combobox)**: 可高度定制,提供丰富的选项和...

    Extjs学习教程

    - 通过`Ext.create()`方法创建组件,例如创建一个窗口使用`Ext.create('Ext.window.Window', {})`。 - 组件构造函数通常接受一个包含配置属性的对象作为参数。 #### 五、示例代码 - **创建一个简单的窗口**: ```...

    extjs 3.2.1 项目

    - **Grid**:可实现数据表格,支持排序、过滤、分页等功能,常用于展示大量结构化数据。 - **Form**:包含各种表单元素,如文本框、选择框、日期选择器等,以及表单验证和提交功能。 - **TreePanel**:用于展示...

    extjs2.02帮助文档

    4. **Grid控件**:ExtJS的Grid组件是其标志性功能之一,用于展示大量数据并支持排序、分页、过滤等功能。2.0.2版本的Grid已经相当成熟,可以满足复杂的数据展示需求。 5. **Form组件**:ExtJS提供了丰富的表单组件...

Global site tag (gtag.js) - Google Analytics