`
kidiaoer
  • 浏览: 822027 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Ext Js Grid 编辑 新增 删除 保存的一个小示例

阅读更多
Ext Js Grid 编辑 新增 删除 保存的一个小示例
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Paging</title>
     <link rel="stylesheet" type="text/css" href="css/ext-all.css" />   
     <script type="text/javascript" src="ext-base.js"></script>
    <script type="text/javascript" src="ext-all.js"></script>  
    <script type="text/javascript" src="edit-grid-paging.js"></script>
    <link rel="stylesheet" type="text/css" href="grid-examples.css" />
    <link rel="stylesheet" type="text/css" href="examples.css" />     
</head>
<body>
<script type="text/javascript" src="examples.js"></script>
<div id="topic-grid"></div>
</body>
</html>

edit-grid-paging.js

Ext.onReady(function(){
  
    Ext.QuickTips.init();    
    var authereditor = Editgridselect.init();//自定义下拉列表 数据取自数据库返回的Json
    
    var Plant = Ext.data.Record.create([                
           {name: 'title', type: 'string'},
           {name: 'forumtitle', type: 'string'},
           {name: 'forumid'},
           {name: 'author', type: 'string'},
           {name: 'replycount', type: 'int'},
           {name: 'lastpost', mapping: 'lastpost', type: 'date', dateFormat: 'timestamp'},
           {name: 'lastposter'},
           {name: 'excerpt'},
           {name: 'threadid'}
      ]);
    
    var store = new Ext.data.Store({
              proxy: new Ext.data.ScriptTagProxy({ //支持跨域获取数据
                                url: 'http://extjs.com/forum/topics-browse-remote.php'
                 }),
              reader: new Ext.data.JsonReader({              
               root: 'topics',
               totalProperty:'totalCount',
               id: "threadid"
              
           }, Plant)
    })
    
    store.setDefaultSort('lastpost', 'desc');


    // pluggable renders
    /*
    function renderTopic(value, p, record){
        return String.format(
                '<b>{0}</b><a href="http://extjs.com/forum/forumdisplay.php?f={3}" target="_blank">{1} Forum</a>',
                value, record.data.forumtitle, record.id, record.data.forumid);
    }
    */
    function renderTopic(value, p, record){
        return String.format(
                '<b>{0}</b>',
                value, record.data.forumtitle, record.id, record.data.forumid);
    }
    function renderLast(value, p, r){
        return String.format('{0} by {1}', value.dateFormat('M j, Y, g:i a'), r.data['lastposter']);
    }
    
    function examineflag(value){
        return value ? '是' : '否';  
    };
        
  
    // 顶部工具栏按钮
    var contrltar = [{
                        text: '添加',
                        handler : function(){
                                                var p = new Plant({
                                                                title: '',
                                                                forumtitle:'',
                                                                forumid:'',
                                                                author: '',
                                                                replycount: 0,
                                                                lastpost: (new Date()).clearTime(),                                                                
                                                                lastposter:'',
                                                                excerpt:'新内容'
                                                                });
                                             //var n = ds.totalLength;
                                            grid.stopEditing();
                                            store.insert(0,p);      //ds.insert(n, p);
                                            grid.startEditing(0,1); //grid.startEditing(n, 0);                                            
                        }
                    },{
                        text: '删除',
                        handler : function(){      
                            var gcm = grid.getSelectionModel();
                            var rows = gcm.getSelections();
                            if(rows.length>0){
                                for (var i = 0; i < rows.length; i++) {
                                                        var row = rows;
                                                        var data = row.data;                                                        
                                                        alert(row.data.threadid);
                                                        store.remove(row);
                                }
                            }else{
                                Ext.Msg.alert('提示','请选择要删除的记录');
                            }
                            
                            
                        }
                    }];
    //底部工具栏按钮
    var pagingBar = new Ext.PagingToolbar({
        pageSize: 10,
        store: store,
        beforePageText:'当前页',
        afterPageText:'共{0}页',
        firstText:'首页',
        lastText:'尾页',
        nextText:'下一页',
        prevText:'上一页',
        refreshText:'刷新',
        displayInfo: true,
        displayMsg: '显示{0} - {1}条 共{2}条记录',
        emptyMsg: "无记录显示",
        
        items:[
            '-', {
            pressed: true,
            enableToggle:true,
            text: '查看详情',
            //cls: 'x-btn-text-icon details',
            toggleHandler: function(btn, pressed){
                    var view = grid.getView();                    
                    view.showPreview = pressed;
                       view.refresh();
            }
        }]
    });
    
    var checkbox = new Ext.grid.CheckboxSelectionModel();
    
    var cm = new Ext.grid.ColumnModel([
            checkbox,
            {
                id: 'topic', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
                header: "主题",
                dataIndex: 'title',
                width: 320,
                renderer: renderTopic,
                sortable: true,
                editor: new Ext.form.TextArea({
                                    allowBlank: false,
                                    blankText:'请输入主题'
                           })
            },{
                header: "作者",
                dataIndex: 'author',
                width: 100,
                //hidden: true,
                sortable: true,
                editor: authereditor
                
            },{
                header: "回复数",
                dataIndex: 'replycount',
                width: 70,
                align: 'right',
                sortable: true,
                editor: new Ext.form.TextField({
                                    allowBlank: false
                           })
            },{
                id: 'last',
                header: "最后发表",
                dataIndex: 'lastpost',
                width: 150,
                renderer: renderLast,                
                sortable: true,
                editor: new Ext.form.DateField({
                                            format: 'm/d/y',
                                            minValue: '01/01/06',
                                               disabledDays: [0, 6],
                                            disabledDaysText: '周末不能选'
                    })
            },{
           header: "审核否",
           dataIndex: 'indoor',
           width: 55,
           renderer: examineflag,
           editor: new Ext.grid.GridEditor(new Ext.form.Checkbox())
        }        
        ]);
    
    var grid = new Ext.grid.EditorGridPanel({              
        store: store,
        renderTo: 'topic-grid',
        cm: cm,      
        width:980,
        id:'egridpanel',
        height:550,
        title:'编辑表格',    
        autoExpandColumn:'common',
        clicksToEdit:1,//设置点击几次才可编辑
        frame:true,
        sm:checkbox,
        loadMask: true,//装载动画        
        stripeRows:false,//条纹
        //autoHeight: true,//一定要写,否则显示的数据会少一行  
        //selModel: new Ext.grid.RowSelectionModel({singleSelect:true}),//设置单行选中模式, 否则将无法删除数据
                  

        // customize view config
        viewConfig: {
            forceFit:true,
            enableRowBody:true,            
            //showPreview:true,
            showPreview:true,
            getRowClass : function(record, rowIndex, p, store){
                //if(this.showPreview){
                if(!this.showPreview){    
                    p.body = '<p>'+record.data.excerpt+'</p>';
                    return 'x-grid3-row-expanded';
                }
                return 'x-grid3-row-collapsed';
            }
        },
        tbar: contrltar,    
        bbar: pagingBar
    });

    grid.on("afteredit", afteredit, grid);//监听编辑后事件    
    store.load({params:{start:0, limit:10}});
    
    function afteredit(e){    
        // e.column;//修改的列,数字类型
        // e.row;//修改过的行从0开始
        //e.originalValue;//原始值
        //e.value;//新值        
        var data     = e.record.data;
        // 显示等待对话框
        Ext.Msg.wait("请等候", "修改中", "操作进行中...");
        var id    = data.threadid;       //"threadid"为返回Json数据的字段名    
        
        Ext.Msg.alert('您成功修改了文章信息', "被修改的内容是:" + e.value + "\n 修改的字段是:"
            + e.field+"; id是:"+id);// 取得用户名        
    }    
    
});



Ext.ux.SliderTip = Ext.extend(Ext.Tip, {
    minWidth: 10,
    offsets : [0, -10],
    init : function(slider){
        slider.on('dragstart', this.onSlide, this);
        slider.on('drag', this.onSlide, this);
        slider.on('dragend', this.hide, this);
        slider.on('destroy', this.destroy, this);
    },

    onSlide : function(slider){
        this.show();
        this.body.update(this.getText(slider));
        this.doAutoWidth();
        this.el.alignTo(slider.thumb, 'b-t?', this.offsets);
    },

    getText : function(slider){
        return slider.getValue();
    }
});



Ext.grid.CheckColumn = function(config){
    Ext.apply(this, config);
    if(!this.id){
        this.id = Ext.id();
    }
    this.renderer = this.renderer.createDelegate(this);
};

Ext.grid.CheckColumn.prototype ={
    init : function(grid){
        this.grid = grid;
        this.grid.on('render', function(){
            var view = this.grid.getView();
            view.mainBody.on('mousedown', this.onMouseDown, this);
        }, this);
    },

    onMouseDown : function(e, t){
        if(t.className && t.className.indexOf('x-grid3-cc-'+this.id) != -1){
            e.stopEvent();
            var index = this.grid.getView().findRowIndex(t);
            var record = this.grid.store.getAt(index);
            record.set(this.dataIndex, !record.data[this.dataIndex]);
        }
    },

    renderer : function(v, p, record){
        p.css += ' x-grid3-check-col-td';
        return '<div class="x-grid3-check-col'+(v?'-on':'')+' x-grid3-cc-'+this.id+'"> </div>';
    }
};




Ext.namespace('Editgridselect');
Editgridselect.init = function (){
    var fm = Ext.form, Ed = Ext.grid.GridEditor;    
        var RecordDef = Ext.data.Record.create([    
            {name: 'formname'},{name: 'formid'}                  
        ]);
        var groupStore=new Ext.data.Store({ proxy: new Ext.data.HttpProxy({url: 'autherselect.php'}),           
            reader: new Ext.data.JsonReader({id:"sn",root:'datalist'},RecordDef ),              
            remoteSort: true });  
        groupStore.load();
        var combox = new Ext.form.ComboBox({
               typeAhead: true,mode : 'local', selectOnFocus : true,
               forceSelection : true ,triggerAction: 'all',
               store:groupStore, hiddenName:'formname',
               valueField : 'formid',displayField : 'formname',      
               lazyRender:true,listeners: { select: function() {this.setValue(combox.getRawValue()); }    
             }  
            });
         var editor = new Ed(combox);         
        return editor;
}

服务器端:
autherselect.php
<?php
header("Content-Type: text/plain; charset=utf-8");
$select = array('datalist'=>array(
array('formname'=>'张三','formid'=>"SCZL"),
array('formname'=>'李四','formid'=>"ZLBGV"),
array('formname'=>'王五','formid'=>"fagg"),
array('formname'=>'Dvaid','formid'=>"fhdf"),
array('formname'=>'Rocky','formid'=>"rocky")
)
);
echo json_encode($select);
//echo "([{'formname':'Java','formid':'java'},{'formname':'EXTJS','formid': 'extjs'}])";
?>
分享到:
评论

相关推荐

    Ext中对于多种store数据分页实现示例

    当数据集发生变化时,例如新增、删除或更新记录,EXT JS会自动更新分页状态。`Store`监听`load`事件,可以在此事件中更新分页控件的状态。 5. **自定义分页逻辑**: 如果服务器的API不符合EXT JS默认的分页方式,...

    ExtJS grid过滤操作

    ExtJS Grid是一个强大的数据展示组件,它允许用户以表格的形式查看和操作大量数据。在实际应用中,数据过滤是常见的需求,以便用户能快速定位到感兴趣的信息。本篇将深入探讨ExtJS Grid的过滤操作,以及如何动态地对...

    Ext增删改查和excel导出

    ExtJS 是一个强大的JavaScript 框架,专用于构建富客户端Web应用。它提供了一整套组件化的用户界面元素和丰富的交互功能,广泛应用于企业级的后台管理系统。在"Ext增删改查和excel导出"这个主题中,我们将探讨如何在...

    EXT-js-中文手册

    - **代码示例**:提供了具体的代码示例,指导开发者如何从零开始构建一个简单的EXT应用。 - **作用域理解**:解释了JavaScript中作用域的概念及其在EXT中的应用。 #### 11. DomQuery基础 - **基础知识**:DomQuery...

    Ext2.2 中文手册

    - **版本历史**:Ext2.2 是 Ext 的一个早期版本,相对于后续版本来说,它的功能可能较为有限,但在当时是非常先进的。 - **下载与安装**: - 下载地址:http://extjs.com/downloads - 安装方式:下载解压后,可以...

    ext 与 dwr 的结合

    标题中的“ext”指的是ExtJS,一个用于构建用户界面的JavaScript库,特别适合开发富互联网应用程序(RIA)。它提供了一套完整的组件模型,包括表格、图表、窗口等,支持数据绑定和远程数据通信。而“dwr”是Direct ...

    EXT 中文手册

    - **Example文件夹**:解压下载包后,会发现一个名为 `example` 的文件夹,其中包含了多个示例项目,这些示例是学习和探索 EXT 功能的最佳起点。 #### 二、Element:Ext的核心 - **Element** 是 EXT 中的一个核心...

    dummy-ext-crud:ExtJS 6 CRUD的简单示例

    这个"dummy-ext-crud"项目是一个关于ExtJS 6中的CRUD(创建、读取、更新和删除)操作的基础示例。在本文中,我们将深入探讨ExtJS 6的关键组件和CRUD操作的工作原理。 首先,让我们了解一下CRUD操作。CRUD是数据库...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的...

    struts2+spring+hibernate例子

    在Struts2和Hibernate处理后台数据后,Ext Grid作为前端展现层,将数据以表格形式展示给用户,并支持用户进行编辑、新增和删除操作。 这个示例项目"**s2s2h31demo**"很可能包含以下组成部分: 1. **Action类**:...

    Extjs 表格

    创建一个ExtJS表格首先需要定义一个`Ext.grid.Panel`实例,设置其配置项,包括数据源、列定义、存储配置等。例如: ```javascript var grid = Ext.create('Ext.grid.Panel', { store: store, // 数据源 columns...

    Ext中文手册

    - **示例**:使用`Ext.get`获取指定ID的元素,使用`Ext.query`根据CSS选择器获取多个元素。 - **应用场景**:在动态添加或修改页面内容时非常有用。 #### 5. **响应事件** - **事件绑定**:通过`on`方法绑定事件...

    Extjs 增删改查

    - `Ext.ux.GridExtend` 类初始化时接收一个配置对象 `config` ,该对象中包含了创建Grid所需的各种参数。 - `filters`:用于设置Grid的数据过滤规则,默认为空字符串。 - `el`:指定Grid渲染到页面的具体元素,...

    ExtAspNet_v2.3.2_dll

    -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的...

    Extjs学习教程

    - **定义**: ExtJS是一个高级的JavaScript库,专门用于构建交互式Web应用程序。它利用AJAX技术来增强用户界面的功能性和美观度,使得Web应用能够像桌面应用一样运行流畅且功能强大。 - **特点**: - 与后端技术无关...

    SSH2 注解 ExtJs前台 返回Json 的一个增删改查demo

    在与ExtJs(一个富客户端JavaScript框架)结合时,SSH2通常用于后台处理业务逻辑和数据存储,而ExtJs则负责前端展示和用户交互。在这个示例中,你可能看到以下关键点: 1. **Json数据交换**:ExtJs与SSH2之间的数据...

    ExtJs教程_完整版

    ExtJS是一个强大的JavaScript框架,专为Web应用开发而设计。它以其优雅的API、丰富的组件集合以及出色的跨浏览器兼容性而著称。与其他JavaScript库相比,ExtJS不仅简化了开发流程,还极大地提高了Web应用的交互性和...

Global site tag (gtag.js) - Google Analytics