在ExtJs中,GridPanel一般用于展示列表数据。同时利用一些附加的插件也能编辑数据。类似于asp.net中的DataGridView控件.

展示数据比较简单,利用Store则可以自动展示,只要在服务器端将数据Json化即可;

下面在Extjs中编辑列表数据

一、单条编辑

        单条数据的编辑利用了Ext.ux.grid.RowEditor插件达到目的

var gridEditor = new Ext.ux.grid.RowEditor({ listeners: {
'canceledit': function () {
var re = FieldGrid.getSelectionModel().getSelected();
var id = re.get("Id");
if (id == null) {
var r = FieldStore.getAt(0);
if (Ext.isDefined(r)) {
FieldStore.remove(r);
}
}
},
'beforeedit': function () {
},
//赋值
'beforerecordsubmit': function (r, cm, ri) {
r.set('Content', cm.getCellEditor(1, ri).getValue());
r.set('Description', cm.getCellEditor(2, ri).getValue());
}
}
});

新增时:

gridEditor.stopEditing();
FieldStore.insert(0, new FieldStore.recordType);
FieldGrid.getView().refresh();
FieldGrid.getSelectionModel().selectRow(0);
gridEditor.startEditing(0);

在store中。定义如下:

var FieldStore = new Ext.data.Store({
url: ‘url’,
remoteSort: true,
reader: new Ext.data.JsonReader({
root: 'data',
totalProperty: 'total',
id: 'Id',
fields: [
{
name: 'Id',
type: 'string'// ID
},
{
name: 'Name',
type: 'string'
} ,
{
name: 'Description',
type: 'string'
} ,
{
name: 'CreateTime',
type: 'date'
}
]
}),
listeners: {
'update': function (thiz, record, operation) {
var model = record.data;
if (operation == Ext.data.Record.EDIT
&& !record.getChanges().Id) {
Ext.Ajax.request({
url: ‘url’,
params: model,
success: function (response, opts) {
var result = Ext.util.JSON.decode(response.responseText);
if (result.success) {
if (!record.get('Id'))
record.set('Id', result.id);
thiz.commitChanges();
} else {
alert(result.msg);
thiz.rejectChanges();
if (!record.get('Id')) //新增
thiz.remove(record);
}
}
});
}
}
}
}
);

在更新时,利用了store组件的update事件进行更新。

效果图:

二、批量编辑数据

在开发过程中,一些业务往往需要一次性保存,如凭证,单据数据,如下图;批量保存数据,这时需要使用EditorGridPanel组件。来定义可编辑的地方。

1、grid以利用Cm来定义列及列的相关属性.定义如下:

var Cm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), Sm,
{
header: "ID",
dataIndex: 'Id',
name: 'Id',
sortable: true,
hidden: true
},
{
header: "数量",
dataIndex: 'Quantity',
sortable: true,
width: 80,
editor: {
xtype: 'numberfield',
allowBlank: false,
name: 'Quantity'
}
},
{
header: "时间(分钟)",
dataIndex: 'WorkingHour',
sortable: true,
width: 80,
editor: {
xtype: 'numberfield',
allowBlank: false,
name: 'Workinghour'
} }
]);

在提交时,

var submit = new Ext.ux.SubmitBtn({
handler: function () {
//grid失去焦点,会将编辑的数据保存到store,如果不采用些,则最后的数据如果直接提交时,则会丢失
if (RouteSheetFormGrid.activeEditor != null) {
RouteSheetFormGrid.activeEditor.completeEdit();
} //将所有修改后的数据保存到数组中。
var arrItems = new Array();
Store.each(
function (r) {
arrItems.push(r.data);
}
); if (form.getForm().isValid()) {
form.getForm().submit({
url: 'url',
params: {
//以json方式提交到后台
'record': Ext.encode(arrItems)
},
success: function (form, action) {
win.destroy(); // 关闭窗口
},
failure: function (form, action) {
alert(action.result.msg);
}
}); // formSubmitArgs
// 引用之前定义的请求参数变量
}
}
});

由于提交时,对象已json化。在后台,需要将json对象化。

ExtJS 列表数据编辑的更多相关文章

  1. 玩转vue前进刷新,后退不刷新and按需刷新

    大白萝卜小课堂开讲了!带你玩转vue前进后退按需刷新! 用vue做后台管理项目,特别是有列表页.列表数据详情页.列表数据修改页功能的码友们,几乎都被vue前进后退都刷新的逻辑坑过,本萝卜更是! 萝卜的 ...

  2. Java快速开发平台,JEECG 3.7.6性能增强版本发布

    JEECG 3.7.6 性能增强版本发布 导读       ⊙Vue SPA单页面应用 ⊙Datagrid标签实现不同风格切换,支持BootstrapTable.EasyUI ⊙灵活通用代码生成器工厂 ...

  3. Java快速开发平台强大的代码生成器,JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布

    JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布 此版本为Vue+ElementUI SPA单页面应用版本,提供新一代风格代码生成器模板,采用Vue技术,提供两套精美模板E ...

  4. 无废话ExtJs 入门教程十七[列表:GridPanel]

    无废话ExtJs 入门教程十七[列表:GridPanel] extjs技术交流,欢迎加群(201926085) 在Extjs中,GridPanel用于数据显示,即我们平时说的列表页.在本节中,我们先对 ...

  5. ExtJS组件的xtype属性列表

    ExtJS的应用界面是由很多小部件组合而成的,这些小部件被称作“组件(Component)”,所有组件都是Ext.Component的子类,Ext.Component提供了生命周期管理包括初始化.渲染 ...

  6. extjs获取选中列表!

    extjs 当批量某一table   元素时!  获取元素的属性! var list= []; var array = grid.getSelectionModel().getSelections() ...

  7. ExtJs之列表常用CRUD

    前端代码: Ext.onReady(function(){ Ext.define('Person', { extend: 'Ext.data.Model', fields: [{name: 'id', ...

  8. ExtJs之列表(grid)

    --renderers渲染器 可以格式化该列显示的数据格式或者按照你自定义的脚本显示最终数据样子 先看下renderer: function()里的参数 renderer:function(value ...

  9. ExtJS Panel主要配置列表

    Ext.panel.Panel 属性 值 描述 animCollapse Boolean 设置面板折叠展开是否显示动画,Ext.Fx可用默认true,否则false applyTo Mixed 面板定 ...

随机推荐

  1. mac升级后提示pod: command not found

    问题:升级mac到10.12使用pod,提示pod: command not found   解决方法:sudo gem install -n /usr/local/bin cocoapods   如 ...

  2. shell编程之流程控制

    -d 判断该文件是否存在,并且是否为目录文件 -e 判断该文件是否存在 -f 判断该文件是否存在,并且是否为普通文件 形式 [ -e   /home/cao/test.txt ] -r 文件 判断该文 ...

  3. database link远程链接数据库

    --授权创建.删除dblink GRANT CREATE [PUBLIC] DATABASE LINK,DROP [PUBLIC] DATABASE LINK TO canco; --查看数据库GLO ...

  4. cefsharp在xp上运行

    今天遇到一个坑.也是自己英语不足的体现.在xp上运行cefsharp.wpf. 查询了各种资料.按照说明一步一步的操作,都没有解决xp上运行cefsharp.wpf. 而且在xp上调试都不知道错误在哪 ...

  5. mysql计划字段中有多少个逗号,或者某个标识符

    eg:计划url中有多少个小数点 select length('www.mysql.com')-length(REPLACE('www.mysql.com','.',''));

  6. [题解]poj 1274 The Perfect Stall(网络流)

    二分匹配传送门[here] 原题传送门[here] 题意大概说一下,就是有N头牛和M个牛棚,每头牛愿意住在一些牛棚,求最大能够满足多少头牛的要求. 很明显就是一道裸裸的二分图最大匹配,但是为了练练网络 ...

  7. POJ3020 匹配

    题目大意:给定一地图,*可以和相邻的*匹配成一对儿,问最少需要对儿匹配才能使所有*都被匹配到. 很直白的最小点覆盖,即ans = 点集数-最大匹配数. 不过一开始要对图进行遍历得到点集,找到一个*就把 ...

  8. VS2015 +EF6 连接MYSQL数据库生成实体

      VS2015 +EF6 连接MYSQL数据库生成实体   已安装软件:VS2015                       XAMPP Control Panel(Mysql服务器)      ...

  9. PL/SQL远程连接Oracle的方式,无需安装客户端

    第一次用PL/SQL Developer这个非官方的软件,遇到了种种困难,幸好通过万能的Google已经全部解决,记录下来备察. 前提是保证你的远程oracle服务器一切正常.   微软客户端设置 使 ...

  10. ITextSharp导出PDF表格和图片(C#)

    文章主要介绍使用ITextSharp导出PDF表格和图片的简单操作说明,以下为ITextSharp.dll下载链接 分享链接:http://pan.baidu.com/s/1nuc6glj 密码:3g ...