Ext.onReady(function(){
/*
* EditorGridPanel的工作过程
* 1、用户点击单元格
* 2、单元格按照预设的组件显示单元格的内容并处于编辑状态
* 3、离开单元格的编辑状态
* 4、更新编辑后的内容,出现三角号表示已经被修改过
* 5、程序内部变化:将记录设置为脏读数据状态,并将修改后的记录存放在Record类型的数组modified中。
*/
//准备数据
var data = [
{id:1,date:new Date(),name:"吕鹏",address:"中华人民共和国",bank:"中国光大银行",isFast:true},
{id:2,date:new Date(),name:"张三",address:"中华人民共和国",bank:"中国农业银行",isFast:false},
{id:3,date:new Date(),name:"李四",address:"中华人民共和国",bank:"中国商业银行",isFast:false},
{id:4,date:new Date(),name:"王五",address:"中华人民共和国",bank:"中国招商银行",isFast:false}
];
//Proxy
var proxy = new Ext.data.MemoryProxy(data);
//描述数据结构
var Order = Ext.data.Record.create(
[
{name:"ID",type:"int",mapping:"id"},//编号
{name:"DATE",type:"date",mapping:"date"},//日期
{name:"NAME",type:"string",mapping:"name"},//姓名
{name:"ADDRESS",type:"string",mapping:"address"},//地址
{name:"BANK",type:"string",mapping:"bank"},//银行
{name:"ISFAST",type:"boolean",mapping:"isFast"}//银行
]
);
//Reader
var reader = new Ext.data.JsonReader({},Order);
//Store 列模型中的dataIndex必须和Human结构中的name属性保持一致
var store = new Ext.data.Store({
proxy:proxy,
reader:reader,
autoLoad:true,
pruneModifiedRecords:true
});
//交易银行
var banks = [
["中国光大银行","中国光大银行"],
["中国农业银行","中国农业银行"],
["中国商业银行","中国商业银行"],
["中国招商银行","中国招商银行"]
]
//列模型
var cm = new Ext.grid.ColumnModel([
{header:"订单编号",dataIndex:"ID",width:60,editor:new Ext.grid.GridEditor(new Ext.form.NumberField({allowBlank:false}))},
{header:"下单日期",dataIndex:"DATE",width:140,renderer:new Ext.util.Format.dateRenderer("Y-m-d"),editor:new Ext.grid.GridEditor(new Ext.form.DateField({
format:"Y-m-d"
}))},
{header:"收货人姓名",dataIndex:"NAME",width:120,editor:new Ext.grid.GridEditor(new Ext.form.TextField())},
{header:"收货人地址",dataIndex:"ADDRESS",editor:new Ext.grid.GridEditor(new Ext.form.TextField())},
{header:"交易银行",dataIndex:"BANK",width:120,editor:new Ext.grid.GridEditor(new Ext.form.ComboBox({
store:new Ext.data.SimpleStore({
fields:["value","text"],
data:banks
}),
displayField:"text",
valueField:"value",
mode:"local",
triggerAction:"all",
readOnly:true,
emptyText:"请选择银行"
}))},
{header:"快递",dataIndex:"ISFAST",width:70,renderer:function(v){return v?"快递":"非快递"},editor:new Ext.grid.GridEditor(new Ext.form.Checkbox())}
]);
//EditorGridPanel定义
var grid = new Ext.grid.EditorGridPanel({
store:store,
cm:cm,
autoExpandColumn:"ADDRESS",
width:800,
autoHeight:true,
renderTo:"a",
autoEncode:true, //提交时是否自动转码
tbar:[{
text:"添加一行",
cls:"x-btn-text-icon",
handler:function(){
var initValue = {
ID:"",
DATE:new Date(),
NAME:"",
ADDRESS:"",
BANK:"",
ISFAST:false
};
var order = new Order(initValue);
grid.stopEditing();
grid.getStore().add(order);
//设置脏数据
order.dirty = true;
//只要一个字段值被修改了,该行的所有值都设置为脏读标记
order.modified = initValue;
if(grid.getStore().modified.indexOf(order) == -1){
grid.getStore().modified.push(order);
}
}
},{
text:"删除一行",
cls:"x-btn-text-icon",
handler:function(){
var sm = grid.getSelectionModel();
if(sm.hasSelection()){
Ext.Msg.confirm("提示","真的要删除选中的行吗?",function(btn){
if(btn == "yes"){
var cellIndex = sm.getSelectedCell();//获取被选择的单元格的行和列索引
var record = grid.getStore().getAt(cellIndex[0]);
grid.getStore().remove(record);
}
});
}else{
Ext.Msg.alert("错误","请先选择删除的行,谢谢");
}
}
},"-",{
text:"保存",
//icon:"",
cls:"x-btn-text-icon",
handler:function(){
var store = grid.getStore();
//得到修改过的Recored的集合
var modified = store.modified.slice(0);
//将数据放到另外一个数组中
var jsonArray = [];
Ext.each(modified,function(m){
//alert(m.data.ADDRESS);//读取当前被修改的记录的地址
//m.data中保存的是当前Recored的所有字段的值json,不包含结构信息
jsonArray.push(m.data);
});
var r = checkBlank(modified);
if(!r){
return;
}else{
//通过ajax请求将修改的记录发送到服务器最终影响数据库
Ext.Ajax.request({
method:"post",//最好不要用get请求
url:"../../../editGridServlet",
success:function(response,config){
var json = Ext.util.JSON.decode(response.responseText);
//grid.getStore().reload();
Ext.Msg.alert("提交成功",json.msg);
},
params:{data:Ext.util.JSON.encode(jsonArray)}
});
}
}
}]
});
//删除一行时,同步数据库
grid.getStore().on("remove",function(s,record,index){
var jsonArray = [record,data];//因为servlet只处理数组,所以先变成数组
if(record.data.ID != ""){
Ext.Ajax.request({
method:"post",
url:"../../../editGridServlet",
params:{data:Ext.util.JSON.encode(jsonArray),action:"delete"},
success:function(response,config){
var msg = Ext.util.JSON.decode(response.responseText);
//grid.getStore().reload();
Ext.Msg.alert("",msg.msg);
}
});
}
});
//验证是否输入的数据是有效的
var checkBlank = function(modified/*所有编辑过的和新增加的Record*/){
var result = true;
Ext.each(modified,function(record){
var keys = record.fields.keys;//获取Record的所有名称
Ext.each(keys,function(name){
//根据名称获取相应的值
var value = record.data[name];
//找出指定名称所在的列索引
var colIndex = cm.findColumnIndex(name);
//var rowIndex = grid.getStore().indexOfId(record.id);
//根据行列索引找出组件编辑器
var editor = cm.getCellEditor(colIndex).field;
//验证是否合法
var r = editor.validateValue(value);
if(!r){
Ext.MessageBox.alert("验证","对不起,您输入的数据非法");
result = false;
return;
}
});
});
return result;
}
});
相关推荐
extjs 可编辑的表格树,每个单元格自定义编辑组件,可以自适应列宽,只有源码与例子,运行实例要修改路径,不然图片不能显示,注意etree.jsp的js引入路径 支持Ext2.x以上版本 如运行不了EmailTo : codeme9@gmail....
非常不错的ExtJs学习总结的例子。欲下载,请从速喔!
extjs资料以及extjs学习指南,extjs资料以及extjs学习指南
在"ExtJS4 2学习 21 动态菜单与表格数据展示操作总结篇"中,我们将深入探讨两个核心组件:动态菜单(Dynamic Menus)和表格数据展示(Grid Data Display),以及如何在实际应用中进行操作。 动态菜单在Web应用中...
在本文中,我们将深入探讨如何使用ExtJS来模拟Excel表格,以及实现Excel的各种功能。 首先,ExtJS中的GridPanel组件是实现模拟Excel表格的核心。GridPanel允许我们展示大量数据,并提供了诸如排序、过滤、分页等...
总结,实现ExtJS表格合并代码的关键在于理解表格组件的结构、配置和模板机制,并能妥善处理浏览器之间的兼容性问题。通过细心的CSS调整和对盒模型的深入理解,我们可以创建出在各种浏览器下表现一致的表格应用。在...
总结来说,ExtJS动态生成表格涉及以下关键知识点: 1. GridPanel:ExtJS中的核心组件,用于显示和操作表格数据。 2. ColumnModel:定义了GridPanel的列结构,包括列头和数据映射。 3. Store:用于存储数据的组件,...
Grid在ExtJS中是一个表格视图,用于展示结构化数据,并支持多种交互操作,如排序、分页、过滤和编辑。在这个特定的应用场景中,我们关注的是“可编辑”和“进度条”这两个特性。 1. 可编辑性:在ExtJS的Grid中,可...
#### 一、ExtJs表格超链接渲染 在ExtJs框架中,我们经常需要在表格(`Ext.grid.Panel`)中显示超链接,并且当用户点击这些超链接时,能够获取到当前行的数据。为了实现这一功能,我们可以使用`renderer`函数对...
NULL 博文链接:https://zyjustin9.iteye.com/blog/2121799
通过以上知识点的学习和实践,你将能够创建出EXTjs 4.0以下版本的合并表格示例。提供的"合并的demo"文件很可能是包含了一个实际的示例代码,你可以通过阅读和运行这个示例来更深入地理解和掌握这些概念。记得在实际...
ExtJS学习手册。。。。,帮助学习extjx的朋友。。
EXTJS的布局系统也是其强大之处,能够确保组件按照预定的方式进行排列和扩展。例如,`ContentBody`中的内容会根据窗口的`ContentBody`尺寸自动拉伸。 EXTJS的组件模型允许开发者创建复杂的用户界面,包括表格、表单...
在探讨《ExtJS学习心得笔记》这一主题时,我们不仅会深入理解ExtJS框架的核心概念与实践技巧,还会从新手的角度出发,提炼出一系列有助于快速上手的学习策略,避免常见的学习陷阱,确保学习过程高效而有成效。...
### Extjs4.2 入门详细文档及表格初级制作 #### 一、Extjs4.2 下载与安装 **1.1 Extjs4.2 文件结构介绍** 初次接触到Extjs4.2的同学可能会对下载下来的文件夹结构感到困惑。下面我们将详细解释各个目录的作用: ...
学习EXTJS总结的例子,里面含有Grid以及ExtJs扩展的例子源码...
目录 1. ExtJs 结构树 2 ...25. extJs 2.0学习笔记(Ext.Element API总结) 69 26. extJs 2.0学习笔记(Element.js篇) 73 27. extJs 2.0学习笔记(DomHelper.js篇) 76 28. extJs 2.0学习笔记(ext.js篇) 77
extjs 学习资料 extjs 教程extjs 学习资料 extjs 教程extjs 学习资料 extjs 教程extjs 学习资料 extjs 教程extjs 学习资料 extjs 教程
EXTJS4的学习文档还包括更多关于组件、布局、数据绑定、事件处理等方面的详细内容,这些都是构建EXTJS应用不可或缺的知识。通过深入学习和实践,开发者可以熟练掌握EXTJS4,创建功能丰富的Web应用程序。
通过本总结例子中的源代码,读者可以更直观地学习EXTJS Grid的用法,掌握其核心功能,并结合实际项目需求进行扩展和优化。对于EXTJS初学者来说,这是一个很好的实践平台,而对于有经验的开发者,这则是一份有价值的...