<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link type="text/css" rel="stylesheet" href="ext-4/resources/css/ext-all.css"/>
<!--定义样式文件-->
<style type="text/css">
.white-row {
background-color: white;
}
.red-row {
background-color: #F5C0C0 !important;
}
.yellow-row {
background-color: #FBF8BF !important;
}
.green-row {
background-color: #99CC99 !important;
}
.x-grid-row .x-grid-cell {
background-color: transparent;
}
</style>
<script type="text/javascript" src="ext-4/ext-all.js"></script>
<script type="text/javascript" src="local/ext-lang-zh_CN.js"></script>
<script>
Ext.onReady(function () {
function renderSex(value) {
if (value == 'male') {
return "<span style='color:red;font-weight:bold;'>红男</span><img src='user_male.png' />";
} else {
return "<span style='color:green;font-weight:bold;'>绿女</span><img src='user_female.png' />";
}
}
function renderMotif(data, cell, record, rowIndex, columnIndex, store) {
var value = record.get('color')
cell.style = "background-color:" + value;
return data;
}
/**
* 渲染函数
* @param value 将要显示在单元格中的值
* @param cellmeta 单元格的相关属性,主要有id和CSS
* @param record 当前行的数据对象 如果要获取列 record.data["id"]
* @param rowIndex 行号
* @param columnIndex 列号
* @param store 构造表格用的ds
*/
function renderDescn(value, cellmeta, record, rowIndex, columnIndex, store) {
var str = "<input type='button' value='查看详细信息' οnclick='alert(\"" +
"这个单元格的值是:" + value + "\\n" +
"这个单元格的配置是:{cellId:" + cellmeta.cellId + ",id:" + cellmeta.id + ",css:" + cellmeta.css + "}\\n" +
"这个单元格对应行的record是:" + record + ",一行的数据都在里边\\n" +
"这是第" + rowIndex + "行\\n" +
"这是第" + columnIndex + "列\\n" +
"这个表格对应的Ext.data.Store在这里:" + store + ",随便用吧。" +
"\")'>";
return str;
}
// 表格包含的列
var columns = [
// 显示行号
new Ext.grid.RowNumberer(),
// header 标题 width 宽度 sortable 当前列是否可排序
{header: '编号', dataIndex: 'id', width: 200, sortable: true},
{header: '名称', dataIndex: 'name', width: 200, sortable: false},
// 通过renderer函数将male显示为红男 而其他为绿女
{
header: '性别', dataIndex: 'sex', width: 200, sortable: false, renderer: function (value) {
if (value == 'male') {
return "<span style='color: red;font-weight: bold'>男</span><img src='icons/user_male.png'>";
} else {
return "<span style='color: green;font-weight: bold'>女</span><img src='icons/user_female.png'>";
}
}
},
{header: '描述', dataIndex: 'descn', width: 400, sortable: false, renderer: renderDescn},
{header: '颜色', dataIndex: 'color', width: 400, sortable: false, renderer: renderMotif},
{header: '日期', dataIndex: 'date', renderer: Ext.util.Format.dateRenderer('Y-m-d'), width: 400}
];
var data = [
['1', 'name1', 'male', 'descn1', '#FBF8BF', '1970-01-15T02:58:04'],
['2', 'name2', 'female', 'descn2', '#99CC99', '1970-01-15T02:58:04'],
['3', 'name3', 'male', 'descn3', '#F5C0C0', '1970-01-15T02:58:04'],
['4', 'name4', 'female', 'descn4', '#FFFFFF', '1970-01-15T02:58:04'],
['5', 'name5', 'male', 'descn5', '#FFFFFF', '1970-01-15T02:58:04']
];
/**
* 数据存储对象store负责将原始数据(二维数组、JSON对象数组、XML文本等)转为Ext.data.Record类型对象
* @type {Ext.data.ArrayStore}
*/
var store = new Ext.data.ArrayStore({
data: data,
fields: [
{name: 'id'},
{name: 'name'},
{name: 'sex'},
{name: 'descn'},
{name: 'color', type: 'string'},
// 日期类型处理 Y是年 m是月 d是日期 H是小时 i是分钟 s是秒
{name: 'date', type: 'date', dateFormat: 'Y-m-dTH:i:s'}
],
// 设置默认的排序规则
sorters: [{property: "id", direction: "DESC"}]
});
store.load();
var sm = new Ext.selection.CheckboxModel();
// var sm = new Ext.selection.CheckboxModel({checkOnly: false});
var grid = new Ext.grid.GridPanel({
// 表格会自动根据columns中设置的width按比例分配 非常智能
forceFit: true,
autoHeight: true,
// 读取数据时的遮罩和提示功能
loadMask: true,
// 表格斑马线效果
stripeRows: false,
// 指示Ext将表格渲染的位置
renderTo: 'grid',
// GridPanel表格必须包含列定义信息columns和表格的数据存储器store
store: store,
columns: columns,
// 提供复选框的功能
// selModel: sm,
selModel: new Ext.selection.RowModel({singleSelect: true}),
viewConfig: {
enableRowBody: true,
getRowClass: function (record, rowIndex, p, ds) {
var cls = 'white-row';
switch (record.data.color) {
case '#FBF8BF' :
cls = 'yellow-row'
break;
case '#99CC99' :
cls = 'green-row'
break;
case '#F5C0C0' :
cls = 'red-row'
break;
}
return cls;
}
}
});
/**
* 点击操作 显示数据
*/
grid.on('itemclick', function () {
var selected = grid.getSelectionModel().selected;
for (var i = 0; i < selected.getCount(); i++) {
// 根据选择模型获取数据 如果选择模型为单元格 那么获取的为单元格数据 如果是行模型 则获取的是行数据
var record = selected.get(i);
Ext.Msg.alert('提示', record.get("id") + "," + record.get("name") + "," + record.get("descn"));
}
});
Ext.get('remove').on('click', function () {
// 删除第二行数据
store.remove(store.getAt(1));
// 执行视图刷新 并没有效果
grid.view.refresh();
});
});
</script>
</head>
<body>
<div id="grid"></div>
<input type="button" id="remove" value="删除第二行"/>
</body>
</html>
点击查看详细信息
点击某一行
添加分页和插入、删除
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link type="text/css" rel="stylesheet" href="ext-4/resources/css/ext-all.css"/>
<!--定义样式文件-->
<style type="text/css">
.white-row {
background-color: white;
}
.red-row {
background-color: #F5C0C0 !important;
}
.yellow-row {
background-color: #FBF8BF !important;
}
.green-row {
background-color: #99CC99 !important;
}
.x-grid-row .x-grid-cell {
background-color: transparent;
}
</style>
<script type="text/javascript" src="ext-4/ext-all.js"></script>
<script type="text/javascript" src="local/ext-lang-zh_CN.js"></script>
<script>
Ext.onReady(function () {
function renderSex(value) {
if (value == 'male') {
return "<span style='color:red;font-weight:bold;'>红男</span><img src='user_male.png' />";
} else {
return "<span style='color:green;font-weight:bold;'>绿女</span><img src='user_female.png' />";
}
}
function renderMotif(data, cell, record, rowIndex, columnIndex, store) {
var value = record.get('color')
cell.style = "background-color:" + value;
return data;
}
/**
* 渲染函数
* @param value 将要显示在单元格中的值
* @param cellmeta 单元格的相关属性,主要有id和CSS
* @param record 当前行的数据对象 如果要获取列 record.data["id"]
* @param rowIndex 行号
* @param columnIndex 列号
* @param store 构造表格用的ds
*/
function renderDescn(value, cellmeta, record, rowIndex, columnIndex, store) {
var str = "<input type='button' value='查看详细信息' οnclick='alert(\"" +
"这个单元格的值是:" + value + "\\n" +
"这个单元格的配置是:{cellId:" + cellmeta.cellId + ",id:" + cellmeta.id + ",css:" + cellmeta.css + "}\\n" +
"这个单元格对应行的record是:" + record + ",一行的数据都在里边\\n" +
"这是第" + rowIndex + "行\\n" +
"这是第" + columnIndex + "列\\n" +
"这个表格对应的Ext.data.Store在这里:" + store + ",随便用吧。" +
"\")'>";
return str;
}
// 表格包含的列
var columns = [
// 显示行号
new Ext.grid.RowNumberer(),
// header 标题 width 宽度 sortable 当前列是否可排序
{header: '编号', dataIndex: 'id', width: 200, sortable: true, editor: {allowBlank: false}},
{header: '名称', dataIndex: 'name', width: 200, sortable: false},
// 通过renderer函数将male显示为红男 而其他为绿女
{
header: '性别', dataIndex: 'sex', width: 200, sortable: false, renderer: function (value) {
if (value == 'male') {
return "<span style='color: red;font-weight: bold'>男</span><img src='icons/user_male.png'>";
} else {
return "<span style='color: green;font-weight: bold'>女</span><img src='icons/user_female.png'>";
}
}
},
{header: '描述', dataIndex: 'descn', width: 400, sortable: false, renderer: renderDescn},
{header: '颜色', dataIndex: 'color', width: 400, sortable: false, renderer: renderMotif},
{header: '日期', dataIndex: 'date', renderer: Ext.util.Format.dateRenderer('Y-m-d'), width: 400}
];
var data = [
['1', 'name1', 'male', 'descn1', '#FBF8BF', '1970-01-15T02:58:04'],
['2', 'name2', 'female', 'descn2', '#99CC99', '1970-01-15T02:58:04'],
['3', 'name3', 'male', 'descn3', '#F5C0C0', '1970-01-15T02:58:04'],
['4', 'name4', 'female', 'descn4', '#FFFFFF', '1970-01-15T02:58:04'],
['5', 'name5', 'male', 'descn5', '#FFFFFF', '1970-01-15T02:58:04']
];
/**
* 数据存储对象store负责将原始数据(二维数组、JSON对象数组、XML文本等)转为Ext.data.Record类型对象
* @type {Ext.data.ArrayStore}
*/
var store = new Ext.data.ArrayStore({
data: data,
fields: [
{name: 'id'},
{name: 'name'},
{name: 'sex'},
{name: 'descn'},
{name: 'color', type: 'string'},
// 日期类型处理 Y是年 m是月 d是日期 H是小时 i是分钟 s是秒
{name: 'date', type: 'date', dateFormat: 'Y-m-dTH:i:s'}
],
// 设置默认的排序规则
sorters: [{property: "id", direction: "DESC"}]
});
store.load();
var sm = new Ext.selection.CheckboxModel();
// var sm = new Ext.selection.CheckboxModel({checkOnly: false});
var grid = new Ext.grid.GridPanel({
// 表格会自动根据columns中设置的width按比例分配 非常智能
forceFit: true,
autoHeight: true,
// 读取数据时的遮罩和提示功能
loadMask: true,
// 表格斑马线效果
stripeRows: false,
// 指示Ext将表格渲染的位置
renderTo: 'grid',
// GridPanel表格必须包含列定义信息columns和表格的数据存储器store
store: store,
columns: columns,
// 提供复选框的功能
// selModel: sm,
// selModel: new Ext.selection.RowModel({singleSelect: true}),
// 编辑单元 必须在columns中包含有editor属性
selType: 'cellmodel',
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
})
],
// Ext.grid.GridView
viewConfig: {
columnsText: '显示的列',
scrollOffset: 30,
sortAscText: '升序',
sortDescText: '升序',
// 自动填满
forceFit: true,
enableRowBody: true,
getRowClass: function (record, rowIndex, p, ds) {
var cls = 'white-row';
switch (record.data.color) {
case '#FBF8BF' :
cls = 'yellow-row'
break;
case '#99CC99' :
cls = 'green-row'
break;
case '#F5C0C0' :
cls = 'red-row'
break;
}
return cls;
}
},
// 添加底部行 显示分页信息
bbar: new Ext.PagingToolbar({
// 指定bbar的样式
cls: 'rightPage',
pageSize: 10,
store: store,
displayInfo: true,
// 显示信息 只有当displayInfo设置为true的时候才会显示
displayMsg: '显示第 {0} 条到 {1} 条记录,一共 {2} 条',
// 没有数据时显示的信息
emptyMsg: "没有记录"
}),
tbar: ['-', {
text: '添加一行',
handler: function () {
var p = {
id: '',
name: '',
sex: '',
descn: '',
color: '#FBF8BF',
date: '1970-01-15T02:58:04'
};
//grid.stopEditing();
store.insert(0, p);
//grid.startEditing(0, 0);
}
}, '-', {
text: '删除一行',
handler: function () {
Ext.Msg.confirm('信息', '确定要删除?', function (btn) {
if (btn == 'yes') {
// 获得表格的选择模型
var sm = grid.getSelectionModel();
// 从选择模型中获得选中的单元格 对应的单元格有两个属性 一个是行号 一个是列号 此处通过行号获取记录
var record = sm.getSelection()[0];
store.remove(record);
}
});
}
}, '-']
});
/**
* 点击操作 显示数据
*/
// grid.on('itemclick', function () {
// var selected = grid.getSelectionModel().selected;
// for (var i = 0; i < selected.getCount(); i++) {
// // 根据选择模型获取数据 如果选择模型为单元格 那么获取的为单元格数据 如果是行模型 则获取的是行数据
// var record = selected.get(i);
// Ext.Msg.alert('提示', record.get("id") + "," + record.get("name") + "," + record.get("descn"));
// }
// });
Ext.get('remove').on('click', function () {
// 删除第二行数据
store.remove(store.getAt(1));
// 执行视图刷新 并没有效果
grid.view.refresh();
});
});
</script>
<style type="text/css">
.rightPage {
float: right;
width: 400px;
}
</style>
</head>
<body>
<div id="grid"></div>
<input type="button" id="remove" value="删除第二行"/>
</body>
</html>
加入数据类型组件,比如NumberField限制只能输入数字,ComboBox限制只能输入备选项,DateField限制只能选择日期,Checkbox则限制从true和false中选择其一。
var comboData = [
[0,'新版ext教程'],
[1,'ext在线支持'],
[2,'ext扩展']
];
// 表格包含的列
var columns = [
// 显示行号
new Ext.grid.RowNumberer(),
// header 标题 width 宽度 sortable 当前列是否可排序
{header: '编号', dataIndex: 'id', width: 100, sortable: true, editor: {allowBlank: false}},
{header: '名称', dataIndex: 'name', width: 100, sortable: false},
// 通过renderer函数将male显示为红男 而其他为绿女
{
header: '性别', dataIndex: 'sex', width: 100, sortable: false, renderer: function (value) {
if (value == 'male') {
return "<span style='color: red;font-weight: bold'>男</span><img src='icons/user_male.png'>";
} else {
return "<span style='color: green;font-weight: bold'>女</span><img src='icons/user_female.png'>";
}
}
},
{header: '描述', dataIndex: 'descn', width: 100, sortable: false, renderer: renderDescn},
{header: '颜色', dataIndex: 'color', width: 100, sortable: false, renderer: renderMotif},
// {header: '日期', dataIndex: 'date', renderer: Ext.util.Format.dateRenderer('Y-m-d'), width: 400}
{
header:'日期',
dataIndex:'date',
// 日期控件
editor:new Ext.form.DateField({
// 日期格式
format: 'Y-m-d',
minValue: '2007-12-14',
// 禁止用户选择星期几
disabledDays: [0, 6],
disabledDaysText: '只能选择工作日'
}),
renderer: function(value) {
return Ext.Date.format(value, "Y-m-d");
}
},{
header:'判断列',
dataIndex:'check',
// checkbox只能选择true or false
editor:new Ext.form.Checkbox({
allowBlank: false
}),
renderer:function(value) {
return value ? '是' : '否';
}
},
{
header:'数字列',
dataIndex:'number',
editor:new Ext.form.NumberField({
allowBlank: false,
allowNegative: false,
maxValue: 10
})
},{
header:'选择列',
dataIndex:'combo',
//
editor:new Ext.form.ComboBox({
store: new Ext.data.SimpleStore({
fields:['value','text'],
data: comboData
}),
emptyText: '请选择',
mode: 'local',
triggerAction: 'all',
valueField: 'value',
displayField: 'text',
// 不能通过readonly来设置只读属性 否则会造成无法正常显示 需要将editable设置为false
editable: false
}),
// 必须设置renderer否则显示的数据时value值 而不是text 毕竟编辑器只是在实际编辑时起作用 表格与editor之间共享的是数据 显示层要依靠各自的实现
renderer: function(value){
return comboData[value][1];
}
}
];
var data = [
['1', 'name1', 'male', 'descn1', '#FBF8BF', '2021-03-18T02:58:04',true,1.1,0],
['2', 'name2', 'female', 'descn2', '#99CC99', '2021-03-17T02:58:04',false,2.2,1],
['3', 'name3', 'male', 'descn3', '#F5C0C0', '2021-03-16T02:58:04',false,0.6,2],
['4', 'name4', 'female', 'descn4', '#FFFFFF', '2021-03-15T02:58:04',true,3.5,1],
['5', 'name5', 'male', 'descn5', '#FFFFFF', '2021-03-12T02:58:04',true,2,2]
];
/**
* 数据存储对象store负责将原始数据(二维数组、JSON对象数组、XML文本等)转为Ext.data.Record类型对象
* @type {Ext.data.ArrayStore}
*/
var store = new Ext.data.ArrayStore({
data: data,
fields: [
{name: 'id'},
{name: 'name'},
{name: 'sex'},
{name: 'descn'},
{name: 'color', type: 'string'},
// 日期类型处理 Y是年 m是月 d是日期 H是小时 i是分钟 s是秒
{name: 'date', type: 'date', dateFormat: 'Y-m-dTH:i:s'},
{name: 'check'},
{name: 'number'},
{name: 'combo'}
],
// 设置默认的排序规则
sorters: [{property: "id", direction: "DESC"}]
});
添加属性表格控件PropertyGrid
var propertygrid = new Ext.grid.PropertyGrid({
title: '属性表格',
autoHeight: true,
width: 300,
renderTo: 'propertygrid',
viewConfig: {
forceFit: true
},
// string、date、bool和number都对应默认的编辑器
source: {
"名字": "不告诉你",
"创建时间": new Date(Date.parse('12/15/2007')),
"是否有效": false,
"版本号": .01,
"描述": "嗯,估计没啥可说的"
}
});
// PropertyGrid默认是提供编辑功能的 使用以下的方法禁用这个编辑功能
propertygrid.on("beforeedit",function(e){
e.cancel = true;
return false;
});