在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. lucene写索引出现锁文件的原因之一

    lucene正常情况目录下的文件 有三个文件. segments.gen segments_a08, 还有一个类似 _uw.cfs名字的东西. 当然,不一定都一样, 但肯定是这三个. 如果出现了很多文 ...

  2. [转] Oracle sql 查询突然变慢 -- 案例分析

    转自:http://jingyan.baidu.com/article/8275fc868ce57946a03cf692.html 一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下 ...

  3. 现在还需要测试或者QA人员吗?

    Facebook没有专门的测试人员,都是开发自己测:微软裁掉了测试部门,改由开发测:google有少量的测试人员,主要做测试自动化框架开发或者性能.安全等专项测试,测试用例还是开发人员自己设计自己跑( ...

  4. System.Security.SecurityException The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception

    [15/08/19 00:03:10] [DataManager-7292-ERROR] System.Reflection.TargetInvocationException: Exception ...

  5. oracle数据库升级记(记一次10.2.0.3版本升级到11.2.0.1版本的过程)

    操作系统:windows xp 已有数据库版本:10.2.0.3 升级目标版本:11.2.0.1 步骤大纲: 在源操作系统(安装有10.2.0.3数据库的操作系统)上安装11.2.0.1数据库软件,然 ...

  6. sprintf()函数,把数字转换成字符串

    char str_2[10];     int a=1234321;     sprintf(str_2,"%d",a);

  7. 121. Best Time to Buy and Sell Stock (一) leetcode解题笔记

    121. Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of ...

  8. DbProviderFactory .net数据库工厂模式

    http://kb.cnblogs.com/page/72789/  工厂模式 http://www.cnblogs.com/Ruiky/archive/2012/04/19/2456784.html ...

  9. jquery easyui window中的datagrid,只能显示一次问题

    最近项目中用到easyui 的动态创建window ,window中嵌入了datagruid.第一次打开是能显示数据,但再次打开时确没显示: 注:url已成功返回了数据. 多次查阅easyui帮助文档 ...

  10. XAMARIN +VS2015 ANDROID 开发禁止屏幕自动转动 Portrait,Nosensor

    网上有很多java的写法,但是放在C#中都无法使用,其实有时候还是安下心来认真的去看官网文档比在百度或者google来的快的多 this.RequestedOrientation = Android. ...