- 浏览: 137897 次
- 性别:
- 来自: 北京
文章分类
最新评论
1. 简单表格控件 (由类Ext.grid.GridPanel来定义)
2. 可编辑表格控件(由类Ext.grid.EditorGridPanel定义)
3. 属性表格控件 (由类Ext.grid.PropertyGrid定义)
4. 分组表格控件 (由类Ext.grid.Group定义)
基本介绍
表格由类Ext.grid.GridPanel定义,继承于Ext.Panel,其xtype为grid,在Ext中 表格控件必须包含列定义信息,并指定表格的数据存取器。表格的
列由Ext.grid.ColumnModel定义,数据存取器由Ext.data.Store定义。根据解析数据的不同,数据存取器可分为JsonStore、SimpleStore、GroupingStore等。
Ext表格包含的功能
1. 选择一条记录、选择多条记录、突出显示选中行
2. 调整列宽、列排序、显示行号、支持复选框、设置查看某些列
3. 支持本地分页和远程分页
4. 可编辑表格、添加新行、删除一行或多行。
5. 数据校验
6. 拖放改变表格大小、拖放一行或多行、树形和表格之间进行数据拖放。
定义列信息
表格是二维的,列由Ext.grid.ColumnModel类定义, 简称cm,它是整个表格的列模型,其由columns配置属性来描述,columns是一个数组,每一行数据
元素描述表格的一列信息,包含的信息如下:
header: 列标题
dataIndex: 列对应的记录集字段
sortable: 列是否可排序
renderer: 列的渲染函数
width: 列宽度
format: 格式化信息
如:
var cm = new Ext.grid.ColumnModel([
{ header: '编号', dataIndex: 'id' },
{ header: '名称', dataIndex: 'name' },
{ header: '描述', dataIndex: 'descn' },
]);
定义数据
表结构确定后,就可以定义数据,如下:
var data =[[1,2,3],[4,5,6],[7,8,9]] --使用二维数组定义数据
定义数据存储对象
数据存储对象由Ext.data.Store类来定义,数据存储对象负责把各种各样的原始数据(如二维数组、JSON对象数组、XML文本等)等转换成表格可以识别的
Ext.data.Record类型的对象,这样就可以把任何格式的数据转换成表格可以使用的形式。
Store对应二个部分: proxy和reader。
proxy: 获取数据的方式, Ext.data.MemoryProxy,它是专门用来解析JavaScript变量的。在定义时只需要把data作为参数传递进去即可。
reader: 如何解析数据,Ext.data.ArrayReader专门用来解析数组,主要是设置如何使数据和列对应。主要由name和mapping指定,name对应列的dataIndex。
mapping对应列的索引
最后需要执行store.load() 来初始化数组。
下面是一个完整的示例:
Ext.onReady(function() {
--定义列信息
var cm = new Ext.grid.ColumnModel([
{ header: '编号', dataIndex: 'id' },
{ header: '名称', dataIndex: 'name' },
{ header: '描述', dataIndex: 'descn' }
]);
--定义二维数组数据
var data = [
['1', 'name1', 'descn1'],
['2', 'name2', 'descn2'],
['3', 'name3', 'descn3'],
['4', 'name4', 'descn4'],
['5', 'name5', 'descn5']
];
--定义数据存储对象
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data), --从内存获取数据
reader: new Ext.data.ArrayReader({}, [ --使用数组解析器解析数组
{ name: 'id',mapping:1 },
{ name: 'name',mapping:0 },
{ name: 'descn' }
])
});
--初始化数据
store.load();
--装配数据
var grid = new Ext.grid.GridPanel({
autoHeight: true,
renderTo: 'grid',
store: store,
cm: cm
});
});
一、 取消列拖动,取消列调整大小,行的斑马线效果
默认的表格展现在我们面前的时候,列的顺序可以随意移动,也可以随意调整列宽,如何禁用了?
enableColumnMove: false
enableColumnResize: false
stripeRows:true
例如:
var grid = new Ext.grid.GridPanel({
cm: cm, --设置列定义
store: store, --设置数据存取对象
autoHeight: true, --自动适应行高
stripeRows:true, --显示斑马线效果
renderTo: 'grid' --渲染表格到div等于grid的容器中
});
二、设置表格读取数据时的遮罩效果
loadMask:true --这样表格在store.load()完成之前一直显示 "loading..." 本地数据由于过快 可能看不到这一效果。
三、 自主决定每列的列宽,列标题的对齐方式
默认情况下,Ext的表格宽度为100px,可以通过列定义时修改这一值。
var cm = new Ext.grid.ColumnModel([
{ header: '编号', dataIndex: 'id' ,width:200,align:'center' }, --注意像素不加px
{ header: '姓名', dataIndex: 'name' ,widht:300, align:'right'},
{ header: '描述', dataIndex: 'descn' ,widht:150, align:'left' }
]);
上面的示例还是需要我们自己计算列的宽度,Ext提供了另外一个表格属性来实现列自动填满表格的设置,相当于WinForm中的Fill属性。
var grid = new Ext.grid.GridPanel({
cm: cm,
store: store,
viewConfig:{ forceFit:true}, --视图层重新计算所有列宽后填充表格。
renderTo: 'grid'
});
还可以指定某列宽度自动延伸,这个时候需要给列设置一个id
如:var cm = new Ext.grid.ColumnModel([{id:'descn',header:'描述',dataIndex:'descn'}]);
var grid = new Ext.grid.GridPanel({
autoExpandColumn:'descn',
cm:cm,
store:store,
renderTo:'grid'
})
四、 列排序
Ext的列默认是不排序的。 如果需要添加列排序功能,需要在定义列模型时增加sortable属性。如:
var cm = new Ext.grid.ColumnModel([
{ header:'编号',dataIndex:'id',sortable:true }
]);
在显示时强制按某列排序,需要通过sortInfo属性来为Ext.data.Store设置一个默认的排序方式。如:
var store = new Ext.data.Store({
proxy:new Ext.data.MemoryProxy(data);
reader:new Ext.data.ArrayReader({},[
{ name:'id' ,mapping:0},
{ name:'name',mapping:1},
{ name:'desc',mapping:2}
]),
sortInfo:{field:'name',direction:'ASC'} --field:表示排序的列名, direction:代表排序的方式,ASC升序 DESC降序。
});
对中文列排序的支持, Ext默认使用的ASCII码进行排序的,而我们却按拼音顺序排序,所以对中文的排序效果存在问题,所以需要重写
Ext的applySort函数,如:
Ext.data.Store.prototype.applySort = funciont(){
if(this.sortInfo && this.remoteSort){
var s = this.sortInfo; --获取排序列JSON对象
var f = s.field; --获取排序列的字段
var st = this.fields.get(f).sortType; --获取排序字段的排序函数
var fn = function(r1,r2){
var v1 =st(r1.data[f]);
var v2 =st(r2.data[f]);
if(typeof(v1) =='string'){
return v1.localCompare(v1);
}
return v1 > v1 ? 1: (v1 < v2 ? -1: 0);
};
this.data.sort(s.direction,fn);
if(this.snapshot && this.snapshot != this.data){
this.snapshot.sort(s.direction,fn);
}
}
};
把上面的函数放到Ext文件的最底端就可以很好的解决Ext中文排序不支持拼音排序的问题。
五、显示日期类型的数据
JSON返回的数据只能是数字和字符串,如何把某一个字符串解析成日期格式了,看下面的例子。
var cm = new Ext.grid.ColumnModel([
{ header: '编号', dataIndex: 'id'},
{ header: '姓名', dataIndex: 'name'},
{ header: '描述', dataIndex: 'descn' },
{ header: '日期', dataIndex:'date',type:'date',renderer:Ext.util.Format.dateRenderer('Y年m月d日')} -- 日期列现实的格式:Y-m-d 2010-10-08
]);
-- renderer: 用于格式化日期格式的数据
var data = [
[1, '小宝', 'descn1', '2010-08-01 18:23:54'],
[2, '小马', 'descn2', '2010-08-01 18:21:54'],
[3, '小强', 'descn3', '2010-08-01 18:22:54'],
[4, '小李', 'descn4', '2010-08-01 18:20:54'],
[5, '小张', 'descn5', '2010-08-01 18:24:54']
];
var store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({}, [
{ name: 'id' },
{ name: 'name' },
{ name: 'descn' },
{ name: 'date', type: 'date', dateFormat: 'Y-m-d h:i:s' } -- 与data的日期格式对应
])
});
-- type:属性会告诉render在解析的原始数据的时候把对应的列作为日期类型处理。
-- dateFormat:属性把得到的字符串转换成相应的日期格式。
store.load();
Ext.onReady(function() {
var grid = new Ext.grid.GridPanel({
cm: cm,
store: store,
stripeRows: true,
height: 300,
renderTo: 'grid'
});
});
发表评论
-
javaScript实现的 数据库
2014-11-06 17:17 15691、LokiJS LokiJS一个基于J ... -
xss攻击
2013-12-27 11:54 587解决方案与建议: 严格过滤用户所能提交的任何数据,特别是能执 ... -
js技巧
2013-08-02 09:02 1716· 事件源对象 event.srcElement.tagNa ... -
jquery combox实现联动效果
2013-05-18 05:15 723需求方要求 所以就想法实现此效果 经过两个小时的看源码、修改、 ... -
jQuery easyui 1.2.5 window、dialog发送两边请求(转)
2013-05-04 12:02 961jQuery easyui 1.2.5 window、dial ... -
跨域问题
2013-05-01 10:04 801可以采用JQuery的getJSON、get方法以JSONP的 ... -
js的base64
2013-04-11 10:55 729var Base64 = { // private prop ... -
JavaScript实现URL编码
2012-07-10 16:46 945<script language="vbscr ... -
用户访问超时
2012-07-09 17:11 1900用户访问超时 解决两种情况下的用户访问超时。 a)普通ht ... -
jQuery 禁止右键
2012-07-03 14:38 1873用jquery实现你的网站不能右键,很简短的代码: $('b ... -
js技巧
2012-06-12 17:08 7641、jquey查找iframe父页面的标签 $('#id' ... -
jquery easyui -datagrid(悬浮,隐藏)(转)
2012-05-30 16:33 0对于jquery easyui 的datagrid引用碰到了几 ... -
GridView脚注行添加合计,并设置背景图片
2011-09-30 11:00 4119以前在做GridView ... -
行渲染和列渲染
2011-09-30 10:57 1317一,单元格渲染 单元格是最终显示的数据地方,它是根据列定义 ... -
ExtJS表格——行号、复选框、选择模型
2011-09-30 10:57 6221一、 设置行号 行号的设置主要问题在于删除某一行后需要重新 ... -
cookie
2011-09-26 10:02 1109/** * * 获取cookie的值 * @para ... -
js结构语句
2011-09-25 11:02 8501 if 条件语句(可嵌套) 2 if....else 条件 ... -
js循环语句
2011-09-25 10:56 17581 for循环结构语句(可以嵌套); 2 for-in 循环 ... -
使用with语句进行对象操作
2011-09-25 10:45 873在js语言中,with语句是一个内容很少的语句,在程序中多次使 ... -
Iframe
2011-09-23 21:14 8001、Iframe子页面调用父页面函数 window.pare ...
相关推荐
#### 一、ExtJs表格超链接渲染 在ExtJs框架中,我们经常需要在表格(`Ext.grid.Panel`)中显示超链接,并且当用户点击这些超链接时,能够获取到当前行的数据。为了实现这一功能,我们可以使用`renderer`函数对...
总结,实现ExtJS表格合并代码的关键在于理解表格组件的结构、配置和模板机制,并能妥善处理浏览器之间的兼容性问题。通过细心的CSS调整和对盒模型的深入理解,我们可以创建出在各种浏览器下表现一致的表格应用。在...
ExtJS表格Grid是一款强大的JavaScript组件,它在Web应用中用于展示和操作数据,尤其是在复杂的业务逻辑和大量数据处理中表现出色。这篇博客文章主要探讨了ExtJS Grid的全面功能,结合源码分析和实用工具,帮助开发者...
extjsDemo2 form panel 一个extjs的demo。1、描绘了表格的属性;2、一个简单的页面布局。供参考。
下面将详细探讨ExtJS表格的这些功能。 1. **创建表格** 创建一个ExtJS表格首先需要定义一个`Ext.grid.Panel`实例,设置其配置项,包括数据源、列定义、存储配置等。例如: ```javascript var grid = Ext.create...
资源名称:获取ExtjS表格的值_ ExtJS_3.4 cellSelectModel资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
FlexiGrid 是一款基于 jQuery 的数据网格插件,它的设计目标是提供类似 ExtJS 的表格效果,但体积更小、更轻便。由于 ExtJS 的庞大和复杂性,有些开发者可能会选择 FlexiGrid 作为替代方案,特别是对于那些对源码...
1. **GridPanel**:GridPanel是ExtJS中用于展示表格数据的组件,它提供了丰富的功能,如排序、筛选、编辑等。在这个例子中,GridPanel被用来从后台动态加载数据,并实现分页。后台数据读取通常涉及Ajax请求,通过Ext...
FlexiGrid 是一款基于 jQuery 的数据网格插件,它的设计目标是模仿 ExtJS 的表格功能,但体积更小、更轻便,适用于那些不希望使用庞大框架但仍想获得类似 ExtJS 表格效果的开发者。FlexiGrid 提供了丰富的表格操作...
ExtJS表格面板(GridPanel)是Sencha Ext JS框架中的一个核心组件,它用于展示大量结构化数据。在本文中,我们将深入探讨如何创建并使用一个完整的ExtJS GridPanel实例,以及与其相关的源码和工具。 首先,让我们...
下面将详细介绍如何在ExtJS表格中启用文本选择复制功能。 ### 知识点一:默认情况下ExtJS表格文本无法选择的原因 ExtJS Grid组件默认情况下会阻止用户通过鼠标选择表格中的文本,这是通过CSS来实现的。具体来说,...
### Extjs4.2 入门详细文档及表格初级制作 #### 一、Extjs4.2 下载与安装 **1.1 Extjs4.2 文件结构介绍** 初次接触到Extjs4.2的同学可能会对下载下来的文件夹结构感到困惑。下面我们将详细解释各个目录的作用: ...
首先,我们需要理解ExtJS表格的基本结构。表格由多个部分组成,包括Store(数据存储)、Model(数据模型)、Column Model(列模型)和View(视图)。Store负责管理表格的数据,Model定义数据字段,Column Model定义...
ExtJs中文排序函数方法详解 在ExtJs框架中,实现中文排序功能是一件非常重要的事情。今天,我们将详细介绍如何使用ExtJs实现中文排序,特别是使用Ext.data.Store.prototype.createComparator()函数来实现中文排序。...
在EXTjs 4.0以下的版本中,开发人员可能会遇到合并表格单元格的需求,这在展示复杂数据或者组织信息时非常有用。EXTjs提供了强大的表格网格组件(GridPanel),允许自定义布局和样式,包括单元格的合并。 在EXTjs中...
ExtJS 表格的功能实现,包括单元格编辑,数据的获取。
在本文中,我们将深入探讨如何使用ExtJS框架实现拖拽功能,特别是在树形视图(Tree)和表格视图(Grid)之间的交互。ExtJS是一个强大的JavaScript库,它提供了丰富的用户界面组件,包括可拖拽的元素,这使得在Web...