ExtJS——Grid实例

来源:互联网 发布:苏州2.5产业园网络招聘 编辑:程序博客网 时间:2024/06/04 01:00

//创建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;

}