ExtJS4.2学习(七)EditorGrid可编辑表格(转)

鸣谢地址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-14/176.html

----------------------------------------------------------------------------------------------

以上实现的效果就是本节所要做的效果,现在看代码:

/**
 * Grid
 * 此js演示了如何设置可编辑表格
 */
//表格数据最起码有列、数据、转换原始数据这3项
Ext.onReady(function(){
    //定义列
    var columns = [
        {header:‘编号‘,dataIndex:‘id‘,width:50,
            editor:{
                allowBlank:true
            }}, //sortable:true 可设置是否为该列进行排序
        {header:‘名称‘,dataIndex:‘name‘,width:80,
                editor:{
                    allowBlank:true
                }},
        {header:‘描述‘,dataIndex:‘descn‘,width:112,
                    editor:{
                        allowBlank:true
                    }}
      ];
    //定义数据
    var data =[
        [‘1‘,‘小王‘,‘描述01‘],
        [‘2‘,‘李四‘,‘描述02‘],
        [‘3‘,‘张三‘,‘描述03‘],
        [‘4‘,‘束洋洋‘,‘思考者日记网‘],
        [‘5‘,‘高飞‘,‘描述05‘]
    ];
    //转换原始数据为EXT可以显示的数据
    var store = new Ext.data.ArrayStore({
        data:data,
        fields:[
           {name:‘id‘}, //mapping:0 这样的可以指定列显示的位置,0代表第1列,可以随意设置列显示的位置
           {name:‘name‘},
           {name:‘descn‘}
        ]
    });
    //加载数据
    store.load();

    //创建表格
    //原:Ext.grid.GridPanel,但在Extjs4.1(4.2)中都没找到,只有new Ext.grid.Panel,不过效果一致。
    var grid = new Ext.grid.Panel({
        renderTo:‘grid‘, //渲染位置
        width:550,
        autoHeight:true,
        store:store,
        columns:columns, //显示列
        stripeRows:true, //斑马线效果
        selType: ‘cellmodel‘,
        plugins:[
                 Ext.create(‘Ext.grid.plugin.CellEditing‘,{
                     clicksToEdit:1 //设置单击单元格编辑(设置为2是双击进行修改)
                 })
        ],
        tbar:[‘-‘,{
            text:‘添加一行‘,
            handler:function(){
                var p ={
                        id:‘‘,
                        name:‘‘,
                        descn:‘‘
                        };
                    store.insert(0,p);
                }
            },‘-‘,{
                text:‘删除一行‘,
                handler:function(){
                    Ext.Msg.confirm(‘系统提示‘,‘确定要删除?‘,function(btn){
                        if(btn==‘yes‘){
                            var sm = grid.getSelectionModel();
                            var record = sm.getSelection()[0];
                            store.remove(record);
                        }
                    });
                }
        },‘-‘,{
            text:‘保存‘,
            handler:function(){
                var m = store.getModifiedRecords();//原:store.getModifiedRecords().slice(0);都可以
                var jsonArray = [];
                Ext.each(m,function(item){
                    jsonArray.push(item.data);
                });
                Ext.Ajax.request({
                    method:‘POST‘,
                    url:‘/extjsTest1/EditGridServlet‘,
                    success:function(response){
                        Ext.Msg.alert(‘系统提示‘,response.responseText,function(){
                            store.load();
                        });
                    },
                    failure:function(){
                        Ext.Msg.alert("错误","与后台联系的时候出了问题。");
                    },
                    params:‘data=‘+Ext.encode(jsonArray)//原:encodeURIComponent(Ext.encode(jsonArray))都可以
                });
            }
        }]
    });
});

一、上面js代码说明

1.Ext.grid.plugin.CellEditing

plugins:[
                 Ext.create(‘Ext.grid.plugin.CellEditing‘,{
                     clicksToEdit:1 //设置单击单元格编辑(设置为2是双击进行修改)
                 })
        ],

这里我们启用了CellEditing插件,其他的部分并没有什么变化。可是看到的结果是,现在可以用TextField的方式随意修改单元格。记得不能让单元格为空,否则无法修改。

默认情况下,需要双击单元格才能激活编辑器,从而进行修改。不过,也可以给表格配置上clicksToEdit:1,这样就可以通过单击单元格激活编辑器,从而进行修改。

TextField不允许输入空值,因为在创建columns时对应的editor设置了allowBlank:false属性。allowBlank:false表示不运行在TextField中输入空值。

2.tbar

tbar:[‘-‘,{
            text:‘添加一行‘,
            handler:function(){
                var p ={
                        id:‘‘,
                        name:‘‘,
                        descn:‘‘
                        };
                    store.insert(0,p);
                }
            },

这是Ext.panel.Panel中的配置属性,在API有这样的介绍:

因为Ext.grid.Panel继承了Ext.panel.Panel,所以继承了它的所有属性,因此可以用这个tbar。

2.1 handler

这是Ext.panel.Tool中的配置选项(Config options)中的一个属性,在API中的描述如下:

3.store.insert

这是Ext.data.ArrayStore中的方法,具体参见API。

二、后台代码

@SuppressWarnings("serial")
public class EditGridServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req,resp);
    }  

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");  

        String data = req.getParameter("data");
        System.out.println(data);  

        resp.getWriter().print(data);
    }
} 

打印结果:

后记:Extjs模拟java的面向对象的思想(当然和java语言不能等同,毕竟它是用javascript编写的),是一个重量级的前台框架,里面涉及到的类较多,因此查询API是了解其中的类、属性、方法等的重要途径。

时间: 2024-08-28 04:08:32

ExtJS4.2学习(七)EditorGrid可编辑表格(转)的相关文章

ExtJS4.2学习(21)动态菜单与表格数据展示操作总结篇2

运行效果: 此文介绍了根据操作左侧菜单在右面板展示相应内容. 一.主页 先看一下跳转主页的方式:由在webapp根目录下的index.jsp跳转至demo的index.jsp 下面是demo的index.jsp的代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% response.setHeade

ExtJS4.2学习(11)可拖放的表格(转)

鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-18/180.html -------------------------------------------------------------------------------------------- 先来看下第一个例子,通过拖放改变表格大小: 以下是完整代码: /** * Grid * 此js演示了ExtJS之可拖放的表格:在一个表格间互相拖

ExtJS4.2学习(13)基于表格的扩展插件---rowEditing

鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-24/182.html -------------------------------------------------------------------------------------------- 前一章说了EditorGrid可编辑表格,但是有点不方便,如果数据多的话,一次性保存未免有点不太方便.下面我们来说一个扩展插件rowEditin

ExtJS4.2学习(20)动态数据表格之前几章总结篇1

本节采用技术:SpringMVC+Jetty+ExtJs4.2+Maven+MySQL5.1以上+SLF4J(前几节学习的大家不知道记住了没,现在来总结复习下,顺便加点新技术) 学习本节前的准备:Eclipse高版本,Jetty插件,Maven插件,JDK1.7 休息了好久没开动教程了,确实最近太累了,大家见谅!先来看下效果,本章节是连续篇,今天是续篇的第一讲,前面都是静态讲解,大家是不是觉得不过瘾啊?咱学Java的嘛,当然得和Java的技术结合讲解咯,前面也说到以后会用动态数据讲解的.一.准备

ExtJS4.2实例:含可编辑下拉列表(Combobox)的表格(Grid)

本教程是进行含有下拉列表(Combobox)的表格(Grid)进行编辑操作,其中省是可以来编辑的,显示结果如图片: 示例代码:http://www.itdatum.net/webui/extjs/2014/08/7926.html 在线演示:http://www.itdatum.net/online/extjs/examples-itdatum/grid-with-combobox-editable/grid-with-combobox-editable.html ExtJS4.2实例:含可编辑

ExtJS4.2 Grid知识点三:改变表格Grid单元格背景颜色

在ExtJS4.2 Grid知识点一:改变表格Grid单元格文字颜色一文中讲解了如何改变单元格中文字颜色,接下来在本章学习如何改变Grid中单元格的背景颜色,显示结果如图片: 在线演示  /  示例代码 实现方式同样是为Grid中该列自定义renderer函数,查询ExtJS 4.2 API得知,Ext.grid.column.Column的renderer属性可以是一个函数也可以是字符串,这个知识点是通过函数来实现的.函数参数列表如下: value : 当前待渲染的单元格值,即表格中某行某列的

ExtJS4.2 Grid知识点四:改变表格Grid行文字颜色,划过Grid行时文字变粗

在ExtJS4.2 Grid知识点一:改变表格Grid单元格文字颜色一文中讲解了如何改变单元格中文字颜色,接下来在本章学习如何改变Grid中整行文字的颜色,这样就不需要为每列单独定义renderer函数,显示结果如图片: 在线演示  /  示例代码 实现方式是在Grid中设置viewConfig属性的getRowClass函数,函数参数列表如下: record: 当前待渲染行数据Model,类型为:Ext.data.Model rowIndex: 当前待渲染行数,类型为:Number rowPa

springMVC3学习(七)--Interceptor拦截器

Spring为我们提供了:org.springframework.web.servlet.HandlerInterceptor接口, org.springframework.web.servlet.handler.HandlerInterceptorAdapter适配器, 实现这个接口或继承此类,能够很方便的实现自己的拦截器. 有下面三个方法: Action之前运行 public boolean preHandle(HttpServletRequest request, HttpServletR

javascript可编辑表格控件 支持全键盘操作

项目中经常会用到表格编辑控件,网上也有不少,但是确实没有完全符合我要求的, 自己写一个吧! 1.该控件支持 数据显示列,文本编辑列,选择列,下拉列,索引列,删除列 六种列类型 2.支持全键盘操作,自定义键位 包括:列焦点切换,行焦点切换,新建行,数据保存(默认 上,下,左,右 键操作) 3.丰富的事件,绝大多数的客户端操作都能触发无刷新后台事件 4.支持统计运算,可自定义运算插件 5.兼容 Ie,chorme,firefox等绝大多数主流浏览器 下载地址:http://files.cnblogs