Ext可编辑的表格控件

使用EditorGird,可以直接在表格执行添加、删除、修改和查找等操作,然后一次性保存。可动态修改某个单元格,保存时进行检查,为空无法保存,验证信息给予提示等。

 

14.1制作一个简单的EditorGrid

(1)、在生成Ext.grid.ColumnModel的列时加上editor配置项。

    {

    header : '名称',

    dataIndex : 'name',

    width : 100,

    sortable : true,

    editor:new Ext.Editor(new Ext.form.TextField({

        allowBlank:false //不能为空,为空无法保存

    }))

}

 

2)、生成Ext.grid.EditorGridPanel,不再是Ext.grid.GridPanel

    Ext.grid.GridPanel中的配置项在EditorGridPanel中也是可以使用的。

3)、默认情况下,单击单元格实现编辑,如果要单击编辑,则在EditorGridPanel中将clicksToEdit设置为1即可。

clicksToEdit:1, // 默认是2,双击编辑表格。

效果:

 

14.2添加、删除行

在表格顶部增加一个工具条,包含2个按钮:添加一行和删除选中行。

单击添加按钮时,新加一行到当前页的最后一行。

Toolbar’-‘是按钮与按钮之间的分隔符。

代码如下:

tbar:new Ext.Toolbar(['-',

    {

        text:"添加一行",

        handler:function() {

            // 定义一个记录集,相当于一个类。Record中不为空的字段在新增后就会显示Record中给的值。

            var p =new Ext.data.Record({

                id:Ext.id(),//ext自动生成唯一值

                name:"",

                sex:"",

                birthday:"2000-10-10",

                description:"default description"

            });

            //停止编辑

            grid.stopEditing();

            //插入到一页的最后一行

            store.insert(PAGE_SIZE,p);

            //提示你编辑,输入内容

            grid.startEditing(PAGE_SIZE,3);

        }

    },

    '-',{

        text:"删除选择的行",

        handler:function() {

            Ext.Msg.confirm("提示","确认要删除吗?",function(res) {

                if (res =="yes") {

                    var sm =grid.getSelectionModel();

                    //获取选中的行

                    var row =sm.getSelected();

                    //删除这一行

                    store.remove(row);

                }

            });

        }

    }

])

 

效果:

那,现在单击“添加一行”,

可以看到,在最后一行追加了一行,且自动将光标切换到“名称”这一列提示我们输入数据。编号、生日、描述这3个列都有了值,就是我们定义Record是赋的值。

 

单击删除按钮,会提示是否删除,单击“yes”,则选中的行就被从表格中删除了。

 

 

14.3保存修改结果

使用上面介绍的添加行的方式,通过store.modified可以获取新增的行。下面在表格顶部添加一个按钮,保存修改结果。

代码:

'-',{

    text:"保存",

    handler:function() {

        //获取修改的数据

        var m =store.modified.slice(0);

        var jsonArray =[];

       

        Ext.each(m,function(item) {

            jsonArray.push(item.data);

        });

       

        // Ajax请求后台,保存数据

        Ext.Ajax.request({

               url:'/myExt2.3/SaveEditorGridServlet',           

success: function(req) {

                   alert(req.responseText);

                   Ext.Msg.show({

                       title:"提示",

                       msg:data,

                       buttons:Ext.Msg.OK,

                       icons:Ext.MessageBox.INFO

                   });

              },

              failure: function(data) {

                   Ext.Msg.show({

                       title:"提示",

                       msg:data,

                       buttons:Ext.Msg.OK,

                       icons:Ext.MessageBox.ERROR

                  });

              },

              headers: {

                   'my-header': 'foo'

              },

              params: {

                   data:decodeURIComponent(Ext.encode(jsonArray))

              }

            });

    }

}

 

后台获得的数据是Json格式,形如:

[

{"id":"ext-gen130","name":"","sex":"df","birthday":"2000-10-10","description":"defaultdescription"},

{"id":"ext-gen154","name":"上德律风","sex":"","birthday":"2000-10-10","description":"defaultdescription"}

]

这是我新增2行的结果,新增后要修改,不然传递给后台的json数据就是[]

Ajax请求完毕后,后台可以返回任意格式,在页面进行解析。

先通过responseText来获取返回的结果。如果是文本就直接使用;如果是Json格式,就使用Ext.decode()函数将Json格式字符串转成Json对象,再进行使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值