Extjs Grid 编辑 新增 删除 保存

//创建edgrid.js
Ext.onReady(function(){
    Ext.QuickTips.init();

    // 格式化日期显示
    function formatDate(value){
        return value ? value.dateFormat('Y, M d') : '';
    }
    // 格式化性别显示,这是个 renderer, 渲染器
    function formatSex(value) {
        return value ? "男" : "女";
    }
    // 弄个缩写的别名
    var fm = Ext.form;

    // 列模型定义了表格所有列的信息,
    // dataIndex 将特定的列映射到数据源(Data Store)中的数据列(在后面创建)
    var cm = new Ext.grid.ColumnModel([
            {
           id:'id',
           header: "编号",
           dataIndex: 'id',
           width: 50
        },
        {
           id:'name',
           header: "用户名",
           dataIndex: 'name',
           width: 250,
           editor: new fm.TextField({
               allowBlank: false// 不能为空
           })
        },
        {
           header: "地区",
           dataIndex: 'area',
           width: 100,
           editor: new Ext.form.ComboBox({
               typeAhead: true,
               triggerAction: 'all',
               transform:'area',// 对应的选择框的ID
               lazyRender:true,
               listClass: 'x-combo-list-small'
            })
        },
        {
           header: "电子邮件",
           dataIndex: 'email',
           width: 220,
           align: 'left',
           editor: new fm.TextField({
               allowBlank: true
           })
        },
        {
           header: "年龄",
           dataIndex: 'age',
           width: 70,
           align: 'right',
           editor: new fm.NumberField({
               allowBlank: true,
               allowNegative: false,
               maxValue: 100
           })
        },
        {
           header: "生日",
           dataIndex: 'birthDay',
           width: 95,
           renderer: formatDate,
           editor: new fm.DateField({
                format: 'y/m/d',
                minValue: '1970/01/01',//最小值
                disabledDays: [0, 6],// 禁止选择的日期
                disabledDaysText: '不许周末出生孩子'
            })
        },
        {
           header: "性别",
           dataIndex: 'sex',
           width: 95,
           renderer: formatSex,
           editor: new fm.Checkbox()
        }
    ]);

    // 默认情况下列是可排序的
    cm.defaultSortable = true;

    // 定义一个用户对象,这样便于我们动态的添加记录,虽然也可以设置成匿名内置对象
    var User = Ext.data.Record.create([
           // 下面的 "name" 匹配读到的标签名称, 除了 "birthDay",它被映射到标签 "birth"
           {name: 'id', type: 'int' },
           {name: 'name', type: 'string'},
           {name: 'area'},
           {name: 'email', type: 'string'},
           {name: 'age', type: 'int'},             // automatic date conversions
           {name: 'birthDay', mapping: 'birth', type: 'date', dateFormat: 'Y/m/d'},
           {name: 'sex', type: 'bool'}
      ]);

    // 创建 Data Store
    var store = new Ext.data.Store({
        // 使用 HTTP 加载
        url: 'users.xml',

        // 因为返回值是 XML, 所以我们创建一个解析器
        reader: new Ext.data.XmlReader({
               // 记录必须包含 "user" 标签
               record: 'user'
           }, User),

        sortInfo:{field:'name', direction:'ASC'}// 排序信息
    });

    // 创建编辑器表格
    var grid = new Ext.grid.EditorGridPanel({
        store: store,
        cm: cm,
        renderTo: 'editor-grid',
        width:800,
        height:300,
        autoExpandColumn:'name',
        title:'功能管理',// 标题
        frame:true,
        clicksToEdit:1,//设置点击几次才可编辑
        selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),//设置单行选中模式, 否则将无法删除数据

        // 顶部工具栏按钮
        tbar: [
        {
            text: '新增',
            iconCls:'xz',//按钮图标的CSS名称
            handler : function(){// 点击按钮执行的操作
                var n = grid.getStore().getCount();// 获得总行数
                var p = new User({
                    id: n + 1,
                    name: '新数据' + n,
                    area: '',
                    email: 'Benson@163.com',
                    age: 20,
                    birthDay: (new Date()).clearTime(),
                    sex: true
                });
                grid.stopEditing();// 停止编辑
                store.insert(n, p);// 插入到最后一行
                grid.startEditing(n, 1);// 开始编辑1单元格
            }
        },
        {
            text: '删除',
            iconCls:'sc01',
            handler : function(){
           
                //var record = grid.getSelectionModel().getSelected();// 返回值为 Record 类型
                var rows = grid.getSelectionModel().getSelections();// 返回值为 Record 数组
if(rows.length==0){
Ext.MessageBox.alert('警告', '最少选择一条信息,进行删除!');
}else{
Ext.MessageBox.confirm('提示框', '您确定要进行该操作?',function(btn){
if(btn=='yes'){
if(rows){
for (var i = 0; i < rows.length; i++) {
//alert(rows[i].get("id"));
store.remove(rows[i]);
//store.removeAll(); //删除所有数据

}
this.getEl().dom.action='./formservlet?operator=save';
this.getEl().dom.submit();
}
}
});
}                // 弹出对话框警告
            }
        },
        {
            text: '保存',
            iconCls: 'bc',
            handler : function(){
var recordtoedit = grid.getSelectionModel().getSelected();// 返回值为 Record 类型
                if(recordtoedit) {
                    Ext.Msg.alert('查看选中', "您现在选中的用户其名字为:" + recordtoedit.get("name"));// 取得用户名
                    // alert("您现在选中的用户其名字为:" + recordtoedit.get("name"));
                }
            }
        },
        {
            text: '查询',
            iconCls: 'cx',
            handler : function(){
              
            }
        }
        ]
    });

    // 单元格编辑后事件处理
    grid.on("afteredit", afterEdit, grid);
    // 事件处理函数
    function afterEdit(e) {
        var record = e.record;// 被编辑的记录
        // 显示等待对话框
        Ext.Msg.wait("请等候", "修改中", "操作进行中...");

          // 更新界面, 来真正删除数据
            Ext.Msg.alert('您成功修改了用户信息', "被修改的用户是:" + e.record.get("name").value + "\n 修改的字段是:"
            + e.field);// 取得用户名
    };

    // 触发数据加载
    store.load();
});

//创建edgrid.jsp

<%@page contentType="text;html; charset=GBK"%>
<%@page import="com.luke.hm.tree.EJBContext"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>表格编辑器示例</title>

<link rel="stylesheet" type="text/css" href="<%= EJBContext.getRootPath()%>/ext/resources/css/ext-all.css" />

<!-- 图标样式 CSS 信息 -->

<link rel="stylesheet" type="text/css" href="<%= EJBContext.getRootPath()%>/menujscss/edgrid.css" />

    <!-- GC -->
     <!-- LIBS -->
     <script type="text/javascript" src="<%= EJBContext.getRootPath()%>/ext/adapter/ext/ext-base.js"></script>
     <!-- ENDLIBS -->

    <script type="text/javascript" src="<%= EJBContext.getRootPath()%>/ext/ext-all.js"></script>
    <!-- 中文提示信息支持 -->
     <script type="text/javascript" src="<%= EJBContext.getRootPath()%>/ext/source/locale/ext-lang-zh_CN.js"></script>

    <!-- 本页的功能代码 -->
    <script type="text/javascript" src="edgrid.js"></script>
    <!--  DWR JavaScript 类库 -->
    <!--script type='text/javascript' src='/dwrtest/dwr/interface/JUserManager.js'></script-->
  <!--script type='text/javascript' src='/dwrtest/dwr/engine.js'></script-->

</head>
<body>

<h1>
  <select name="area" id="area" style="display: none;">
      <option value="历城区">历城区</option>
      <option value="历下区">历下区</option>
      <option value="槐荫区">槐荫区</option>
  </select>

  <!-- 放置可编辑控件的 DIV -->
</h1>
<div id="editor-grid"></div>

</body>
</html>

//创建users.xml
<?xml version="1.0" encoding="GBK"?>
<users>
  <user>
      <id>1</id>
    <name>XXX1</name>
    <area>XXX2</area>
    <email>XXX1@126.com</email>
    <age>88</age>
    <sex>true</sex>
    <birth>1980/01/01</birth>
  </user>
    <user>
    <id>2</id>
    <name>Benson</name>
    <area>山东济南</area>
    <email>Benson@163.com</email>
    <age>27</age>
    <sex>true</sex>
    <birth>1982/12/12</birth>
  </user>
    <user>
    <id>3</id>
    <name>Benson_GG</name>
    <area>济南历下</area>
    <email>aa@bb.com</email>
    <age>28</age>
    <sex>false</sex>
    <birth>1982/12/11</birth>
  </user>

</users>

//创建edgrid.css
/** 定义了一些工具栏按钮的 CSS 样式 */
.xz {
    background-image:url(./xz.gif) !important;
}

.sc01 {
    background-image:url(./sc.gif) !important;
}

.sc02 {
    background-image:url(./sc.gif) !important;
}

.cx {
    background-image:url(./cx.gif) !important;
}

.bc {
    background-image:url(./bc.gif) !important;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值