花些时间捣鼓了下EditorGridPanel、PagingToolbar这两个控件,并写了个demo,顺便贴出使用细节和一些问题的解决方式和思路. 先看效果图.
数据加载完毕:
修改数据时:
用过EditorGridPanel的朋友应该会觉得最纠结的要属DateField字段了,因为它的格式问题很难设置.我还没有发现有属性可以直接解决这个问题,这里我提出我的解决方式,希望能够帮助到大家,如果大家有更好的解决方式,恳请共享下.让大家都能学习学习.
首先,在设置列模型的时候,DateField的renderer、editor属性是必须要设置的.设置的格式最好与数据库的DateTime格式保持一致,如:"yyyy-mm-dd/yyyy年mm月dd日",如果你只是设置这两个属性就想界面上显示的格式为你设定的.那么可能会令你失望了.它显示的格式为"NaN-NaN-NaN/NaN年NaN月NaN日",那么要如何解决这个问题呢.其实也很简单.只要在定义store的时候,指定field的类型就可以了(详细见源码).那么这个问题就算是解决了.然而新的问题接踵而至.当我们将修改完的数据进行保存的时候,会在插入数据库的时候引发异常,这也是因为格式的问题.我们在获取更新后的日期的时候,日期格式为GMT,并非我们预定义的.GMT是它的默认类型.那么如何将GMT类型变成我们需要的.可能大家会想到的有.通过split函数.这里我的做法是用GMT格式的日期去初始化Date对象.然后相应获取year、month、day.然后再拼接字符串.注意month要加1,month是从0-11计算的.那么到这里就算是结束了,从显示到数据入库.
关于PagingToolbar,注意的一点就是start必须是从0开始的,框架内部默认就是以接收0进行相应处理的.要么你可以去修改源码.效果等同.
到这里就算是介绍完了.
关于如何将更新的数据传递到后台,那么首选数据格式是json,我采用的是拼接字符串的方式,然后在后台转换成json对象,进行处理.拼接字符串肯定不是王道,也很麻烦,如果大家有更好的方法的,希望共享下.先谢过了.
JS代码:
Ext.onReady(function() {
var store = new Ext.data.JsonStore( {
url : "StudentServlet?action=list",
totalProperty : "totalCount",
root : "result",
fields : [ "id", "name", "sex", "age",{
name:"born",
type:"date",
dateFormat:"Y-m-d"
}],
autoLoad : {
params : {
start : 0,
limit : 5
}
}
});
var cm = new Ext.grid.ColumnModel( [ {
header : "编号",
dataIndex : "id",
sortable : true
}, {
header : "姓名",
dataIndex : "name",
sortable : true,
editor : new Ext.form.TextField()
}, {
header : "性别",
dataIndex : "sex",
sortable : true,
editor : new Ext.form.ComboBox( {
editable : false,
triggerAction : "all",
store : [ "男", "女" ]
})
}, {
header : "年龄",
dataIndex : "age",
sortable : true,
editor : new Ext.form.NumberField( {
minValue : 0,
maxValue : 120
})
}, {
header : "出生日期",
dataIndex : "born",
sortable : true,
width : 200,
renderer : Ext.util.Format.dateRenderer("Y年m月d日"),
editor : new Ext.form.DateField( {
format : "Y年m月d日"
})
} ]);
var editor = new Ext.grid.EditorGridPanel( {
title : "EditorGridPanel Test",
renderTo : "edit",
width : 620,
height : 300,
frame : true,
cm : cm,
store : store,
collapsible : true,
buttons : [ {
text : "提交",
handler : editorCommit
} ],
bbar : new Ext.PagingToolbar( {
pageSize : 5
store : store,
displayInfo : true,
beforePageText : "当前第",
afterPageText : "页,共{0}页",
displayMsg : "显示{0}-{1}条,共{2}条",
emptyMsg : "当前没有记录显示"
})
});
editor.show();
function editorCommit() {
var records = editor.getStore().getModifiedRecords();
if (records.length > 0) {
var txt = "[";
for ( var i = 0; i < records.length; i++) {
var cid = records[i].get("id");
var cname = records[i].get("name");
var cage = records[i].get("age");
var csex = records[i].get("sex");
var cborn = records[i].get("born");
//这里使用format格式函数
var time = new Date(cborn).format("Y-m-d");
//var year = date.getYear();
//var month = date.getMonth();//+1
//var day = date.getDate();
//var time = year + "-" + (month + 1) + "-" + day;
txt = txt + "{id:" + cid + ",name:'" + cname + "',age:"
+ cage + ",sex:'" + csex + "',born:'" + time
+ "'}";
if (i < records.length - 1)
txt = txt + ",";
}
txt = txt + "]";
Ext.Ajax.request( {
url : "StudentServlet",
success : function(flag) {
if (flag.responseText) {
editor.getStore().commitChanges()
Ext.Msg.alert("提示","更新成功");
} else {
Ext.Msg.alert("提示","更新失败");
}
},
failure : function() {
Ext.Msg.alert("提示","更新失败");
},
params : {
action : "modify",
json : txt
}
});
}
}
});
分享到:
相关推荐
1. 数据绑定:EditorGridPanel通过Store获取数据,Store可以与服务器端进行数据交换。 2. 编辑模式:当用户点击单元格时,对应的编辑器会显示出来,用户可以在编辑器中输入新值。 3. 提交更改:编辑完成后,...
NULL 博文链接:https://zxf-noimp.iteye.com/blog/629629
EditorGridPanel是Ext JS库中的一个组件,它结合了数据网格和表单编辑的功能,允许用户直接在网格的单元格内编辑数据。当用户点击某个单元格进行编辑时,编辑器应该在原单元格位置弹出,但有时由于某种原因,整个...
3. **行编辑**:EXT GRID支持行内编辑,用户可以直接在表格中修改数据,这需要结合EditorGridPanel和Form Field组件来实现。 4. **排序和过滤**:GRID可以实现列点击排序,通过配置`sortable`属性和`sortInfo`对象...
因为项目的需求,实现一个可以编辑的tree,在网上找了一个牛人写的控件.Ext.ux.maximgb.tg.EditorGridPanel 把源码下载下来以后 不能运行,自己根据给出的列子,另写了一个小程序.不过并没有与数据库交互.
以下是一个示例代码片段,展示了如何解决这个问题: ```javascript // 部门列表的store var comboxDepartmentStore = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: "GetDepartmentJson.aspx", ...
总结来说,EXT JS的EditorGridPanel结合XMLReader提供了强大且灵活的数据处理能力,使得开发者可以轻松地从XML数据源创建一个可编辑的网格界面,极大地提高了Web应用的交互性和用户体验。在实际开发中,可以根据具体...
#### 文档与示例(docs & examples) 文档(docs)是学习任何框架的起点,ExtJS 4.20的官方文档详细记录了API的使用方法,是开发者不可或缺的资源。此外,ExtJS还提供了一系列示例(examples),通过实际案例演示...
在提供的博客链接中,虽然没有直接涉及下拉列表树控件,但可以从 `EditorGridPanel` 的示例中看到ExtJS处理复杂表单和数据的强大能力。`EditorGridPanel` 是一个可编辑的表格组件,允许用户直接在表格中修改数据,这...
右键菜单的资料,代码已经详细描写。请仿照文件中所描述即可使用,不限于EXT4.0以上版本使用。
下面是一个简单的使用 `EditorGridPanel` 的示例: ```javascript Ext.onReady(function() { var data = [ ['任务管理系统', '3D', 'http://www.renwu.com'], ['Blog系统', 'BJT', 'http://www.blog.org'], ['...
在示例代码中,可以看到如何创建一个包含可编辑列的`EditorGridPanel`,并使用`Ext.form.TextField`作为编辑器。`formatDate`函数用于格式化日期,`CheckboxSelectionModel`用于设置多选模式,而`CheckColumn`则用于...
如果没有设置,则使用列索引与数据记录中的字段索引进行匹配。 4. **width** - **描述**:定义列的宽度。 5. **align** - **描述**:设置列内数据的对齐方式。 6. **hidden/fixed/menuDisabled/resizable/...
描述提到"配置proxy就好请求就可以从后台拿数据",这通常意味着在实际应用中,proxy会被配置为某种类型,如AjaxProxy或ScriptTagProxy,以便与服务器进行异步通信,获取或提交数据。但在这个例子中,由于是本地数据...
EXTJS 是一个强大的JavaScript 框架,专用于构建富客户端Web应用程序。它提供了丰富的组件库,包括数据网格、图表、表单等,使得...了解这些方法可以帮助开发者根据项目需求选择合适的方式来实现数据与Excel 的交互。
var grid = new Ext.grid.EditorGridPanel({ store: store, columns: [ // 列定义 {header: 'ID', width: 50, sortable: true, dataIndex: 'id'}, {header: 'Name', width: 100, sortable: true, dataIndex: '...
因为前段时间有两个专案要用到extjs技术,所以自己学了一段...grid,tree,显示树信息的TreePanel、用于显示表格的GridPanel及EditorGridPanel,还有代表应用程序窗口的Ext.Window,与数据库交付,希望对初学者带来帮助
1. 基本控件:Box、Button、ColorPalette、Component、Container、CycleButton、DataView、DatePicker、Editor、EditorGridPanel、Grid、PagingToolbar、Panel、ProgressBar、SplitButton、TabPanel、TreePanel、...