ExtJS中表格的特性简介
表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,xtype为grid
表格的列信息由Ext.grid.ColumnModel定义
表格的数据存储器由Ext.data.Store定义,根据解析数据的不同,数据存储器可具体分为如下几种:
JsonStore,SimpleStore,GroupingStore…
一个表格的基本编写过程:
1、创建表格列模型
var cm = new Ext.grid.ColumnModel({
{header: '角色', dataIndex: 'role'},
{header: '等级', dataIndex: 'grade'},
{header: '创建日期', dataIndex: 'createDate', type: 'date', renderer: Ext.util.Format.dateRenderer('Y年m月d日')} //创建日期类型的数据
});
2、创建数据数组
var data = [
['士兵','7','2011-07-2412:34:56'],
['将军','10','2011-07-2412:34:56'],
];
3、创建一个数据存储对象store,包含两部分:proxy,获取数据的方式;reader,解析数据的方式
ArrayReader的mapping用来设置列的排列顺序
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'role', mapping: 1},
{name: 'grade', mapping: 0}
{name: 'createDate', mapping: 2, type:'date', dateFormat:'Y-m-dH:i:s'} //创建日期列和显示格式
])
});
store.load();
4、创建GridPanel,装配ColumnModel和store
var grid = new Ext.grid.GridPanel({
renderTo: 'grid',
store: store,
cm: cm
});
另外获取远程数据可以使用ScriptTagProxy,如下所示
var store = new Ext.data.Store({
proxy: new Ext.data.ScriptTagProxy({
url:'http://...'}),
reader: new Ext.data.ArrayReader({}, [
{name: 'role', mapping: 1},
{name: 'grade', mapping: 0}
]),
sortInfo: {field: "role", direction: "ASC"} //设置默认排序列,ASC/DESC
});
表格的常用属性功能
var grid = new Ext.grid.GridPanel({
enableColumnMove: false, //禁止拖放列
enableColumnResize: false, //禁止改变列的宽度
stripeRows: true, //斑马线效果
loadMask: true, //读取数据时的遮罩和提示功能
renderTo: 'grid',
store: store
cm: cm
});
var cm = new Ext.grid.ColumnModel({
{header: '角色', dataIndex: 'role', width:90, sortable: true}, //width设置列宽度,默认为100px,sortable设置排序功能
{id:'grade', header: '等级', dataIndex: 'grade', width:40}
});
var grid = new Ext.grid.GridPanel({
renderTo: 'grid',
store: store,
cm: cm
viewConfig:{ //让每列自动填充满表格
forceFit: true
}
autoExpandColumn: 'grade' //自动延伸列,列的id在ColumnModel中定义
});
渲染表格,为表格设置特殊样式
只需要在cm里面增加一个renderer属性,添加一个自定义函数来渲染传进来(由EXT自动传递)的参数的样式即可,即在返回value之前拼装上相应的HTML和CSS或者JS响应事件。
function renderSex(value) {
if (value == 'male') {
return "<span style='color:blue;'>男</span><img src='images/icon_male.png' />";
} else {
return "<span style='color:red;'>女</span><img src='images/icon_female.png' />";
}
}
var cm = new Ext.grid.ColumnModel([
{header:'id',dataIndex:'id'},
{header:'name',dataIndex:'name'},
{header:'sex',dataIndex:'sex',renderer:renderSex},
]);
var data = [
['1','Jason','male'],
['2','Kate','female']
];
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'id'},
{name: 'name'},
{name: 'sex'}
])
});
store.load();
var grid = new Ext.grid.GridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm
});
自动显示行号,只要在创建cm时创建一个RowNumberer就可以了
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(), //显示行号
{header:'id',dataIndex:'id'},
{header:'name',dataIndex:'name'},
{header:'sex',dataIndex:'sex',renderer:renderSex},
]);
删除列
store.remove(store.getAt(i));
刷新表格
grid.view.refresh();
为表格添加复选框
需要使用CheckboxSelectionModel
SelectionModel sm在使用时要放到cm和表格中
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
sm,
{header:'编号',dataIndex:'id'},
{header:'名称',dataIndex:'name'}
]);
var data = [
['1','name1'],
['2','name2']
];
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'id'},
{name: 'name'}
])
});
store.load();
var grid = new Ext.grid.GridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm,
sm: sm
});
通过RowSelectionModel设置只选择一行
var grid = new Ext.grid.GridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm,
sm: new Ext.grid.RowSelectionModel({singleSelect:true})
});
使用选择模型获取数据
grid.on('click', function() {
var selections = grid.getSelectionModel().getSelections();
for (var i = 0; i < selections.length; i++) {
var record = selections[i];
Ext.Msg.alert(record.get("id"));
}
});
表格视图
从MVC的思想来看表格控件:
* Ext.data.Store可看做模型
* Ext.grid.GridPanel可看做控制器
* Ext.grid.GridView可看做视图
* 一般GridView由GridPanell自动生成,如果想设置GridView的属性时,可以通过Ext.grid.GridPanel的getView()获得视图实例
Ext.get('button1').on('click', function() {
grid.getView().scrollToTop();
grid.getView().focusCell(0, 0);
var cell = grid.getView().getCell(0, 0);
cell.style.backgroundColor = 'red';
});
使用GridPanel的viewConfig在创建表格时设置GridView的初始化参数
var grid = new Ext.grid.GridPanel({
height: 100,
width: 400,
renderTo: 'grid',
store: new Ext.data.Store({
autoLoad: true,
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, meta)
}),
columns: meta,
viewConfig: {
columnsText: '显示的列', //设置下拉菜单提示文字
scrollOffset: 30, //设置右侧滚动条的预留宽度
sortAscText: '升序', //设置下拉菜单提示文字
sortDescText: '降序', //设置下拉菜单提示文字
forceFit: true //自动延展每列的长度
}
});
为表格添加分页工具条
* 可以使用GridPanel的bbar属性,并创建Ext.PagingToolbar分页工具条对象
* 注意,如果配置了分页工具条,store.load()就必须在构造表格以后执行。
var grid = new Ext.grid.GridPanel({
renderTo: 'grid',
autoHeight: true,
store: store,
cm: cm,
bbar: new Ext.PagingToolbar({
pageSize: 10, //每页显示10条数据
store: store,
displayInfo: true, //显示数据信息
displayMsg: '显示第 {0} 条到 {1} 条记录,一共 {2} 条',
emptyMsg: "没有记录" //没有数据时显示的信息
})
});
store.load();
从后台脚本获取分页数据
使用HttpProxy传递请求,获取服务器的JSON数据,交给JsonReader解析
var cm = new Ext.grid.ColumnModel([
{header:'编号',dataIndex:'id'},
{header:'名称',dataIndex:'name'}
]);
var store = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url:'page.jsp'}),
reader: new Ext.data.JsonReader({
totalProperty: 'totalProperty',
root: 'root'
}, [
{name: 'id'},
{name: 'name'}
])
});
var grid = new Ext.grid.GridPanel({
renderTo: 'grid',
autoHeight: true, //数据传回来之前高度未知,所以要使用自适应高度
store: store,
cm: cm,
bbar: new Ext.PagingToolbar({
pageSize: 10,
store: store,
displayInfo: true,
displayMsg: '显示第 {0} 条到 {1} 条记录 / 共 {2} 条',
emptyMsg: "没有记录"
})
});
store.load({params:{start:0,limit:10}});
如果想让分页工具条显示在表格的顶部,可以使用GridPanel的tbar属性设置添加工具条
让ExtJS在对返回的数据进行分页
* 需要在页面中引入examples/locale目录下的PagingMemoryProxy.js文件
* 再使用PagingMemoryProxy设置代理
var store = new Ext.data.Store({
proxy: new Ext.data.PagingMemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'id'},
{name: 'name'},
{name: 'descn'}
])
});
//在创建GridPanel之后调用
store.load({params:{start:0,limit:3}});
可编辑表格控件EditorGrid的使用
制作一个简单的EditorGrid的步骤
1、定义列ColumnModel,在里面添加editor属性
var cm = new Ext.grid.ColumnModel([{
header: '编号',
dataIndex: 'id',
editor: new Ext.grid.GridEditor(
new Ext.form.TextField({
allowBlank: false //不允许在TextField中输入空值
})
)
}, {
header: '名称',
dataIndex: 'name',
editor: new Ext.grid.GridEditor(
new Ext.form.TextField({
allowBlank: false
})
)
}]);
2、准备一个数组
var data = [
['1','Jason'],
['2','Jay']
];
3、创建Ext.data.Store,设置内存代理,设置ArrayReader解析数组
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'id'},
{name: 'name'}
])
});
4、加载数据,创建EditorGridPanel
store.load();
var grid = new Ext.grid.EditorGridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm
});
为可编辑表格添加和删除数据
1、使用Record的create方法创建一个记录集MyRecord,MyRecord相当于一个类
var MyRecord = Ext.data.Record.create([
{name: 'id', type: 'string'},
{name: 'name', type: 'string'}
]);
store.load();
2、创建EditorGridPanel面板,在属性tbar中创建Ext.Toolbar
var grid = new Ext.grid.EditorGridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm,
tbar: new Ext.Toolbar(['-', { //-表示菜单分隔符
text: '添加一行',
handler: function(){
var p = new MyRecord({
id:'',
name:''
});
grid.stopEditing(); //关闭表格的编辑状态
store.insert(0, p); //创建的Record插入store的第一行
grid.startEditing(0, 0); //激活第一行第一列的编辑状态
}
}, '-', {
text: '删除一行',
handler: function(){
Ext.Msg.confirm('信息', '确定要删除?', function(btn){
if (btn == 'yes') {
var sm = grid.getSelectionModel(); //获取表格的选择模型
var cell = sm.getSelectedCell(); //获取选中的单元格
var record = store.getAt(cell[0]); //通过行号得到store这一行对应的Record
store.remove(record); //移除数据
}
});
}
}, '-'])
});
为可编辑表格保存修改的结果
在上面例子的基础之上,添加一个保存按钮
text: '保存',
handler: function(){
var m = store.modified.slice(0); //获得store中修改过得数据
for (var i = 0; i < m.length; i++) { //验证表格信息是否正确,是否包含空格
var record = m[i];
var fields = record.fields.keys;
for (var j = 0; j < fields.length; j++) {
var name = fields[j];
var value = record.data[name];
var colIndex = cm.findColumnIndex(name);
var rowIndex = store.indexOfId(record.id);
var editor = cm.getCellEditor(colIndex).field;
if (!editor.validateValue(value)) {
Ext.Msg.alert('提示', '请检查输入的数据是否正确!', function(){
grid.startEditing(rowIndex, colIndex);
});
return;
}
}
}
var jsonArray = [];
Ext.each(m, function(item) {
jsonArray.push(item.data); //把修改过得数据放到jsonArray中
});
Ext.lib.Ajax.request( //使用Ajax请求提交给后台
'POST',
'save_data.jsp',
{success: function(response){ //返回成功
Ext.Msg.alert('信息', response.responseText, function(){
store.reload();
});
},failure: function(){ //返回失败
Ext.Msg.alert("错误", "服务器保存数据出错!");
}},
'data=' + encodeURIComponent(Ext.encode(jsonArray))
);
}
另外store可以设置属性pruneModifiedRecords: true。这样,每次remove或load操作时store会自动清除modified标记,可以避免出现下次提交时还会把上次那些modified信息都带上的现象。
限制表格输入的数据类型
NumberField
{
header:'ID',
dataIndex:'id',
editor:new Ext.grid.GridEditor(new Ext.form.NumberField({ //NumberField限制只能输入数字
allowBlank: false,
allowNegative: false, //不能输入减号
maxValue: 10
}))
}
ComboBox
var comboData = [
['0','Java'],
['1','Android']
];
{
header:'ComboBox',
dataIndex:'combo',
editor:new Ext.grid.GridEditor(new Ext.form.ComboBox({
store: new Ext.data.SimpleStore({
fields:['value','text'],
data: comboData
}),
emptyText: '请选择',
mode: 'local',
triggerAction: 'all',
valueField: 'value',
displayField: 'text',
readOnly:true
})),
renderer: function(value){
return comboData[value][1];
}
}
DateField
{
header:'Date',
dataIndex:'date',
editor:new Ext.grid.GridEditor(new Ext.form.DateField({
format: 'Y-m-d',
minValue: '2011-07-24',
disabledDays: [0, 6],
disabledDaysText: '选择周一到周六之间的日期'
})),
renderer: function(value) {
return value.format("Y-m-d");
}
}
属性表格控件PropertyGrid的使用
是在EditorGrid的基础上开发的更智能的高级表格组件
var grid = new Ext.grid.PropertyGrid({
title: '属性表格控件PropertyGrid',
autoHeight: true,
width: 400,
renderTo: 'grid',
viewConfig: {
forceFit: true
},
source: {
"String": "String",
"Date": new Date(Date.parse('07/24/2011')),
"boolean": false,
"float": .01
}
});
禁用PropertyGrid编辑功能的方法
grid.on('beforeedit', function(e){
e.cancel = true;
return false;
});
根据表格的name获取value
grid.store.getById('Jason').get(value);
表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,xtype为grid
表格的列信息由Ext.grid.ColumnModel定义
表格的数据存储器由Ext.data.Store定义,根据解析数据的不同,数据存储器可具体分为如下几种:
JsonStore,SimpleStore,GroupingStore…
一个表格的基本编写过程:
1、创建表格列模型
var cm = new Ext.grid.ColumnModel({
{header: '角色', dataIndex: 'role'},
{header: '等级', dataIndex: 'grade'},
{header: '创建日期', dataIndex: 'createDate', type: 'date', renderer: Ext.util.Format.dateRenderer('Y年m月d日')} //创建日期类型的数据
});
2、创建数据数组
var data = [
['士兵','7','2011-07-2412:34:56'],
['将军','10','2011-07-2412:34:56'],
];
3、创建一个数据存储对象store,包含两部分:proxy,获取数据的方式;reader,解析数据的方式
ArrayReader的mapping用来设置列的排列顺序
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'role', mapping: 1},
{name: 'grade', mapping: 0}
{name: 'createDate', mapping: 2, type:'date', dateFormat:'Y-m-dH:i:s'} //创建日期列和显示格式
])
});
store.load();
4、创建GridPanel,装配ColumnModel和store
var grid = new Ext.grid.GridPanel({
renderTo: 'grid',
store: store,
cm: cm
});
另外获取远程数据可以使用ScriptTagProxy,如下所示
var store = new Ext.data.Store({
proxy: new Ext.data.ScriptTagProxy({
url:'http://...'}),
reader: new Ext.data.ArrayReader({}, [
{name: 'role', mapping: 1},
{name: 'grade', mapping: 0}
]),
sortInfo: {field: "role", direction: "ASC"} //设置默认排序列,ASC/DESC
});
表格的常用属性功能
var grid = new Ext.grid.GridPanel({
enableColumnMove: false, //禁止拖放列
enableColumnResize: false, //禁止改变列的宽度
stripeRows: true, //斑马线效果
loadMask: true, //读取数据时的遮罩和提示功能
renderTo: 'grid',
store: store
cm: cm
});
var cm = new Ext.grid.ColumnModel({
{header: '角色', dataIndex: 'role', width:90, sortable: true}, //width设置列宽度,默认为100px,sortable设置排序功能
{id:'grade', header: '等级', dataIndex: 'grade', width:40}
});
var grid = new Ext.grid.GridPanel({
renderTo: 'grid',
store: store,
cm: cm
viewConfig:{ //让每列自动填充满表格
forceFit: true
}
autoExpandColumn: 'grade' //自动延伸列,列的id在ColumnModel中定义
});
渲染表格,为表格设置特殊样式
只需要在cm里面增加一个renderer属性,添加一个自定义函数来渲染传进来(由EXT自动传递)的参数的样式即可,即在返回value之前拼装上相应的HTML和CSS或者JS响应事件。
function renderSex(value) {
if (value == 'male') {
return "<span style='color:blue;'>男</span><img src='images/icon_male.png' />";
} else {
return "<span style='color:red;'>女</span><img src='images/icon_female.png' />";
}
}
var cm = new Ext.grid.ColumnModel([
{header:'id',dataIndex:'id'},
{header:'name',dataIndex:'name'},
{header:'sex',dataIndex:'sex',renderer:renderSex},
]);
var data = [
['1','Jason','male'],
['2','Kate','female']
];
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'id'},
{name: 'name'},
{name: 'sex'}
])
});
store.load();
var grid = new Ext.grid.GridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm
});
自动显示行号,只要在创建cm时创建一个RowNumberer就可以了
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(), //显示行号
{header:'id',dataIndex:'id'},
{header:'name',dataIndex:'name'},
{header:'sex',dataIndex:'sex',renderer:renderSex},
]);
删除列
store.remove(store.getAt(i));
刷新表格
grid.view.refresh();
为表格添加复选框
需要使用CheckboxSelectionModel
SelectionModel sm在使用时要放到cm和表格中
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
sm,
{header:'编号',dataIndex:'id'},
{header:'名称',dataIndex:'name'}
]);
var data = [
['1','name1'],
['2','name2']
];
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'id'},
{name: 'name'}
])
});
store.load();
var grid = new Ext.grid.GridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm,
sm: sm
});
通过RowSelectionModel设置只选择一行
var grid = new Ext.grid.GridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm,
sm: new Ext.grid.RowSelectionModel({singleSelect:true})
});
使用选择模型获取数据
grid.on('click', function() {
var selections = grid.getSelectionModel().getSelections();
for (var i = 0; i < selections.length; i++) {
var record = selections[i];
Ext.Msg.alert(record.get("id"));
}
});
表格视图
从MVC的思想来看表格控件:
* Ext.data.Store可看做模型
* Ext.grid.GridPanel可看做控制器
* Ext.grid.GridView可看做视图
* 一般GridView由GridPanell自动生成,如果想设置GridView的属性时,可以通过Ext.grid.GridPanel的getView()获得视图实例
Ext.get('button1').on('click', function() {
grid.getView().scrollToTop();
grid.getView().focusCell(0, 0);
var cell = grid.getView().getCell(0, 0);
cell.style.backgroundColor = 'red';
});
使用GridPanel的viewConfig在创建表格时设置GridView的初始化参数
var grid = new Ext.grid.GridPanel({
height: 100,
width: 400,
renderTo: 'grid',
store: new Ext.data.Store({
autoLoad: true,
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, meta)
}),
columns: meta,
viewConfig: {
columnsText: '显示的列', //设置下拉菜单提示文字
scrollOffset: 30, //设置右侧滚动条的预留宽度
sortAscText: '升序', //设置下拉菜单提示文字
sortDescText: '降序', //设置下拉菜单提示文字
forceFit: true //自动延展每列的长度
}
});
为表格添加分页工具条
* 可以使用GridPanel的bbar属性,并创建Ext.PagingToolbar分页工具条对象
* 注意,如果配置了分页工具条,store.load()就必须在构造表格以后执行。
var grid = new Ext.grid.GridPanel({
renderTo: 'grid',
autoHeight: true,
store: store,
cm: cm,
bbar: new Ext.PagingToolbar({
pageSize: 10, //每页显示10条数据
store: store,
displayInfo: true, //显示数据信息
displayMsg: '显示第 {0} 条到 {1} 条记录,一共 {2} 条',
emptyMsg: "没有记录" //没有数据时显示的信息
})
});
store.load();
从后台脚本获取分页数据
使用HttpProxy传递请求,获取服务器的JSON数据,交给JsonReader解析
var cm = new Ext.grid.ColumnModel([
{header:'编号',dataIndex:'id'},
{header:'名称',dataIndex:'name'}
]);
var store = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url:'page.jsp'}),
reader: new Ext.data.JsonReader({
totalProperty: 'totalProperty',
root: 'root'
}, [
{name: 'id'},
{name: 'name'}
])
});
var grid = new Ext.grid.GridPanel({
renderTo: 'grid',
autoHeight: true, //数据传回来之前高度未知,所以要使用自适应高度
store: store,
cm: cm,
bbar: new Ext.PagingToolbar({
pageSize: 10,
store: store,
displayInfo: true,
displayMsg: '显示第 {0} 条到 {1} 条记录 / 共 {2} 条',
emptyMsg: "没有记录"
})
});
store.load({params:{start:0,limit:10}});
如果想让分页工具条显示在表格的顶部,可以使用GridPanel的tbar属性设置添加工具条
让ExtJS在对返回的数据进行分页
* 需要在页面中引入examples/locale目录下的PagingMemoryProxy.js文件
* 再使用PagingMemoryProxy设置代理
var store = new Ext.data.Store({
proxy: new Ext.data.PagingMemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'id'},
{name: 'name'},
{name: 'descn'}
])
});
//在创建GridPanel之后调用
store.load({params:{start:0,limit:3}});
可编辑表格控件EditorGrid的使用
制作一个简单的EditorGrid的步骤
1、定义列ColumnModel,在里面添加editor属性
var cm = new Ext.grid.ColumnModel([{
header: '编号',
dataIndex: 'id',
editor: new Ext.grid.GridEditor(
new Ext.form.TextField({
allowBlank: false //不允许在TextField中输入空值
})
)
}, {
header: '名称',
dataIndex: 'name',
editor: new Ext.grid.GridEditor(
new Ext.form.TextField({
allowBlank: false
})
)
}]);
2、准备一个数组
var data = [
['1','Jason'],
['2','Jay']
];
3、创建Ext.data.Store,设置内存代理,设置ArrayReader解析数组
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{name: 'id'},
{name: 'name'}
])
});
4、加载数据,创建EditorGridPanel
store.load();
var grid = new Ext.grid.EditorGridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm
});
为可编辑表格添加和删除数据
1、使用Record的create方法创建一个记录集MyRecord,MyRecord相当于一个类
var MyRecord = Ext.data.Record.create([
{name: 'id', type: 'string'},
{name: 'name', type: 'string'}
]);
store.load();
2、创建EditorGridPanel面板,在属性tbar中创建Ext.Toolbar
var grid = new Ext.grid.EditorGridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm,
tbar: new Ext.Toolbar(['-', { //-表示菜单分隔符
text: '添加一行',
handler: function(){
var p = new MyRecord({
id:'',
name:''
});
grid.stopEditing(); //关闭表格的编辑状态
store.insert(0, p); //创建的Record插入store的第一行
grid.startEditing(0, 0); //激活第一行第一列的编辑状态
}
}, '-', {
text: '删除一行',
handler: function(){
Ext.Msg.confirm('信息', '确定要删除?', function(btn){
if (btn == 'yes') {
var sm = grid.getSelectionModel(); //获取表格的选择模型
var cell = sm.getSelectedCell(); //获取选中的单元格
var record = store.getAt(cell[0]); //通过行号得到store这一行对应的Record
store.remove(record); //移除数据
}
});
}
}, '-'])
});
为可编辑表格保存修改的结果
在上面例子的基础之上,添加一个保存按钮
text: '保存',
handler: function(){
var m = store.modified.slice(0); //获得store中修改过得数据
for (var i = 0; i < m.length; i++) { //验证表格信息是否正确,是否包含空格
var record = m[i];
var fields = record.fields.keys;
for (var j = 0; j < fields.length; j++) {
var name = fields[j];
var value = record.data[name];
var colIndex = cm.findColumnIndex(name);
var rowIndex = store.indexOfId(record.id);
var editor = cm.getCellEditor(colIndex).field;
if (!editor.validateValue(value)) {
Ext.Msg.alert('提示', '请检查输入的数据是否正确!', function(){
grid.startEditing(rowIndex, colIndex);
});
return;
}
}
}
var jsonArray = [];
Ext.each(m, function(item) {
jsonArray.push(item.data); //把修改过得数据放到jsonArray中
});
Ext.lib.Ajax.request( //使用Ajax请求提交给后台
'POST',
'save_data.jsp',
{success: function(response){ //返回成功
Ext.Msg.alert('信息', response.responseText, function(){
store.reload();
});
},failure: function(){ //返回失败
Ext.Msg.alert("错误", "服务器保存数据出错!");
}},
'data=' + encodeURIComponent(Ext.encode(jsonArray))
);
}
另外store可以设置属性pruneModifiedRecords: true。这样,每次remove或load操作时store会自动清除modified标记,可以避免出现下次提交时还会把上次那些modified信息都带上的现象。
限制表格输入的数据类型
NumberField
{
header:'ID',
dataIndex:'id',
editor:new Ext.grid.GridEditor(new Ext.form.NumberField({ //NumberField限制只能输入数字
allowBlank: false,
allowNegative: false, //不能输入减号
maxValue: 10
}))
}
ComboBox
var comboData = [
['0','Java'],
['1','Android']
];
{
header:'ComboBox',
dataIndex:'combo',
editor:new Ext.grid.GridEditor(new Ext.form.ComboBox({
store: new Ext.data.SimpleStore({
fields:['value','text'],
data: comboData
}),
emptyText: '请选择',
mode: 'local',
triggerAction: 'all',
valueField: 'value',
displayField: 'text',
readOnly:true
})),
renderer: function(value){
return comboData[value][1];
}
}
DateField
{
header:'Date',
dataIndex:'date',
editor:new Ext.grid.GridEditor(new Ext.form.DateField({
format: 'Y-m-d',
minValue: '2011-07-24',
disabledDays: [0, 6],
disabledDaysText: '选择周一到周六之间的日期'
})),
renderer: function(value) {
return value.format("Y-m-d");
}
}
属性表格控件PropertyGrid的使用
是在EditorGrid的基础上开发的更智能的高级表格组件
var grid = new Ext.grid.PropertyGrid({
title: '属性表格控件PropertyGrid',
autoHeight: true,
width: 400,
renderTo: 'grid',
viewConfig: {
forceFit: true
},
source: {
"String": "String",
"Date": new Date(Date.parse('07/24/2011')),
"boolean": false,
"float": .01
}
});
禁用PropertyGrid编辑功能的方法
grid.on('beforeedit', function(e){
e.cancel = true;
return false;
});
根据表格的name获取value
grid.store.getById('Jason').get(value);
相关推荐
这个DLL文件可能是扩展ExtJS库的.NET封装,提供了更方便地在.NET环境中使用ExtJS的功能,比如简化数据绑定和异步调用的API。 7. **最佳实践** - 使用数据分页以优化性能,避免一次性加载大量数据。 - 对于异步...
在实际开发中,你可能需要将DateTime控件与其他ExtJS组件(如表格、表单)结合使用,以创建复杂的用户界面。例如,在一个日程管理应用中,DateTime控件可以用于添加或编辑事件的时间。通过阅读和理解DateTime控件的...
**二、ExtJS表格控件(Grid)的使用** 1. **创建列信息**: 使用`Ext.grid.ColumnModel`定义表格的列,例如: ```javascript var cm = new Ext.grid.ColumnModel([ { header: '编号', dataIndex: 'id' }, { ...
### Ext表格控件和树控件 #### 表格控件 ##### 1.1 基本表格 `GridPanel` 在Ext JS框架中,`GridPanel` 是一种用于展示和管理表格数据的重要组件。它提供了丰富的功能,例如排序、缓存、拖动列、隐藏列、自动显示...
手册中涵盖了ExtJS 3.3的所有类、方法、事件、属性和配置选项,对于开发者来说是不可或缺的工具。 1. **组件系统**:ExtJS的核心在于其组件模型,包括窗口(Window)、面板(Panel)、表格(Grid)、表单(Form)等...
1. **控件属性**:在`Extjs 控件属性.doc`中,可能会涵盖ExtJS 4中的各种组件(如窗口、面板、表格等)的常用属性。这些属性用于定义组件的行为、外观和交互方式。例如,宽度(width)、高度(height)、标题(title...
在本文中,我们将探讨如何使用ExtJS框架结合Java实现数据库数据的分页查询。ExtJS是一个强大的JavaScript库,常用于构建桌面级的Web应用程序,而Java则是一种广泛使用的后端开发语言,常用于处理服务器端逻辑。在这...
4. **表单组件**:EXTJS包含一系列表单控件,如文本字段(TextField)、选择框(ComboBox)、日期选择器(DatePicker)等,能够满足各种数据输入需求。 5. **数据存储**:EXTJS的数据存储系统包括Store,它可以连接...
2. JSONP(JsonP):跨域数据获取方式,通过动态插入script标签实现。 3. 远程操作(Remote Operations):在服务器端处理排序、过滤等操作,减轻客户端负担。 五、布局与窗口系统 1. 窗口(Windows):可拖动、可...
通过《ExtJS 3.0 中文API》的帮助文档,开发者可以深入理解每个类的构造函数、方法、属性,以及如何使用它们来创建复杂的用户界面和交互逻辑。同时,CHM格式的文档便于快速搜索和查阅,提高了开发效率。在实际项目中...
2. **表格控件**:`ExtJS中表格控件的使用,属性设置和数据的获取.doc`会讲解ExtJS中的GridPanel,这是用于显示大量结构化数据的组件。文档可能涵盖了如何创建表格,设置列宽和样式,以及如何绑定数据源,进行数据的...
4. **表格(Grid)组件**:EXTJS 3的表格组件功能强大,支持分页、排序、过滤、编辑等功能,并且可以与其他组件如表格面板、工具栏等结合使用,实现复杂的数据展示和操作。 5. **表单(Form)组件**:EXTJS 3的表单...
在ExtJS 2.0中,Model用于定义数据结构和行为,而Store则作为数据容器,负责管理一组Model实例。Store支持远程数据加载,可以与服务器通过Ajax进行通信,实现分页、排序、过滤等功能。 **4. GridPanel** GridPanel...
- **Ext.apply()和Ext.applyIf()**: 这两个方法用于合并对象属性,是Extjs中常用的设计模式之一。 #### 消息框 消息框是与用户交互的重要手段之一。本章详细介绍了Extjs提供的多种消息框类型及其使用方法。 - **...
- 数据在Extjs中不仅仅是指存储的数据,还涉及到数据的加载、处理和展示。 - 组件与数据紧密相关,许多组件都需要数据源的支持才能正常工作。 - **Ext.data.DataProxy类** - 负责从服务器加载数据,包括异步请求...
动态树是ExtJS中的一种控件,用于展示层次结构的数据。它可以实时地加载和更新节点,这在处理大量数据或需要根据用户交互动态改变内容时非常有用。动态树通常通过Ajax请求来获取并填充数据,从而实现异步加载,提高...
- **Read**:使用Store的`load()`方法从服务器获取数据,填充到表格或其他组件中。 - **Update**:修改Store中的某个Model实例,然后调用`sync()`将更改推送到服务器。 - **Delete**:选择要删除的Model,调用`...