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对象,再进行使用。

你可能感兴趣的:(ext)