EXT_Grid控件精华展现(0积分下载).doc

上传人:壹****1 文档编号:563762844 上传时间:2024-02-04 格式:DOC 页数:23 大小:259.04KB
返回 下载 相关 举报
EXT_Grid控件精华展现(0积分下载).doc_第1页
第1页 / 共23页
EXT_Grid控件精华展现(0积分下载).doc_第2页
第2页 / 共23页
EXT_Grid控件精华展现(0积分下载).doc_第3页
第3页 / 共23页
EXT_Grid控件精华展现(0积分下载).doc_第4页
第4页 / 共23页
EXT_Grid控件精华展现(0积分下载).doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《EXT_Grid控件精华展现(0积分下载).doc》由会员分享,可在线阅读,更多相关《EXT_Grid控件精华展现(0积分下载).doc(23页珍藏版)》请在金锄头文库上搜索。

1、EXT Grid控件精华展现 javascriptEXT Grid控件精华展现 javascriptEXT Grid控件精华展现 javascript2009-05-06 09:47无论是界面之美,还是功能之强,ext的表格控件都高居榜首。单选行,多选行,高亮显示选中的行,推拽改变列宽度,按列排序,这些基本功能咱们就不提了。自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。再加上可编辑grid,添加新行,删除一或多行,提示脏数据,推拽改变grid大小,grid之间推拽一或多行,甚至可以在tree和gri

2、d之间进行拖拽,啊,这些功能实在太神奇了。更令人惊叹的是,这些功能竟然都在ext表格控件里实现了。呵呵不过ext也不是万能的,与fins的ecside比较,ext不能锁定列(土豆说1.x里支持锁定列,但是2.0里没有了,因为影响效 率。),也没有默认的统计功能,也不支持excel,pdf等导出数据。另外fins说,通过测试ecside的效率明显优于ext呢。:)2.2. 让我们搞一个grid出来耍耍吧。光说不练不是我们的传统,让我们基于examples里的例子,来自己搞一个grid看看效果,同时也可以知道一个grid到底需要配置些什么东西。1. 首先我们知道表格肯定是二维的,横着叫行,竖着叫列

3、。跟设计数据库,新建表一样,我们要先设置这个表有几列,每列叫啥名字,啥类型,咋显示,这个表格的骨架也就出来了。ext里,这个列的定义,叫做ColumnModel,简称cm的就是它,它作为整个表格的列模型,是要首先建立起来的。这里我们建立一个三列的表格,第一列叫编号(code),第二列叫名称(name),第三列叫描述(descn)。var cm = new Ext.grid.ColumnModel( header:编号,dataIndex:id, header:名称,dataIndex:name, header:描述,dataIndex:descn);看到了吧?非常简单的定义了三列,每列的hea

4、der表示这列的名称,dataIndex是跟后面的东西对应的,咱们暂且不提。现在只要知道有了三列就可以了。2. 有了表格的骨架,现在我们要向里边添加数据了。这个数据当然也是二维了,为了简便,我们学习examples里的array-grid.js里的方式,把数据直接写到js里。var data = 1,name1,descn1, 2,name2,descn2, 3,name3,descn3, 4,name4,descn4, 5,name5,descn5;很显然,我们这里定义了一个二维数据, (什么?你不知道这是二维数组?快改行吧,这里不是你该待的地方。)这个有五条记录的二维数组,显示到grid里

5、就应该是五行,每行三列,正好对应这id,name,descn,在我们的脑子里应该可以想像出grid显示的结果了,为了让想像变成显示,我们还需要对原始数据做一下转化。3. 因 为咱们希望grid不只能支持array,还可以支持json,支持xml,甚至支持咱们自己定义的数据格式,ext为咱们提供了一个桥 梁,Ext.data.Store,通过它我们可以把任何格式的数据转化成grid可以使用的形式,这样就不需要为每种数据格式写一个grid的实现了。 现在咱们就来看看这个Ext.data.Store是如何转换array的。var ds = new Ext.data.Store( proxy: new

6、 Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader(, name: id, name: name, name: descn );ds.load();ds要对应两个部分:proxy和reader。proxy告诉我们从哪里获得数据,reader告诉我们如何解析这个数据。现在我们用的是Ext.data.MemoryProxy,它是专门用来解析js变量的。你可以看到,我们直接把data作为参数传递进去了。Ext.data.ArrayReader 专门用来解析数组,并且告诉我们它会按照定义的规范进行解析,每行读取三个数据,第一个叫i

7、d,第二个叫name,第三个descn。是不是有些眼熟,翻 到前面cm定义的地方,哦,原来跟dataIndex是对应的。这样cm就知道哪列应该显示那条数据了。唉,你要是能看明白这一点,那你实在是太聪明了。记得要执行一次ds.load(),对数据进行初始化。有兄弟可能要问了,要是我第一列数据不是id而是name,第二列数据不是name而是id咋办?嗯,嗯,这个使用就用mapping来解决。改改变成这样:var ds = new Ext.data.Store( proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayRead

8、er(, name: id, mapping: 1, name: name, mapping: 0, name: descn, mapping: 2 );这样如截图所见,id和name两列的数据翻转了。如此这般,无论数据排列顺序如何,我们都可以使用mapping来控制对应关系,唯一需要注意的是,索引是从0开始的,所以对应第一列要写成mapping:0,以此类推。4. 哈哈,万事俱备只欠东风,表格的列模型定义好了,原始数据和数据的转换都做好了,剩下的只需要装配在一起,我们的grid就出来了。var grid = new Ext.grid.Grid(grid, ds: ds, cm: cm);gr

9、id.render();注意:上头是ext-1.x的写法,Ext.grid.Grid的第一个参数是渲染的id,对应在html里应该有一个 的东西,这样grid才知道要把自己画到哪里。创建完grid以后,还要用grid.render()方法,让grid开始渲染,这样才能显示出来。5. 好了,把所有代码组合到一起,看看效果吧。var cm = new Ext.grid.ColumnModel( header:编号,dataIndex:id, header:名称,dataIndex:name, header:描述,dataIndex:descn ); var data = 1,name1,descn

10、1, 2,name2,descn2, 3,name3,descn3, 4,name4,descn4, 5,name5,descn5 ; var ds = new Ext.data.Store( proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader(, name: id, name: name, name: descn ) ); ds.load(); var grid = new Ext.grid.Grid(grid, ds: ds, cm: cm ); grid.render();看看吧,这就是咱们搞出来

11、的grid了。html例子是lingo-sample/1.1.1目录下的02-01.html,把这个目录copy到ext-1.x的example目录下,就可以直接打开观看效果。2.3. 上边那个是1.x的,2.0稍微有些不同哦首先,Ext.grid.Grid已经不见了,咱们需要用Ext.grid.GridPanel。需要传递的参数也有少许区别。var grid = new Ext.grid.GridPanel( el: grid, ds: ds, cm: cm);看到了吗?负责指定渲染位置的id放到了里边,对应的名字是el。似乎ext2里对这些参数进行了统一,比以前更整齐了。因为其他地方都一样

12、,我就不多说了,html例子在是lingo-sample/2.0目录下的02-01.html。从截图上看,少了斑马条,下边多了一条线,应该只是css有所不同吧。默认情况下,两个版本的grid都可以拖拽列,也可以改变列的宽度。不知道怎么禁用这两个功能呢。最大的不同应该是1.x里默认支持的右键效果,在2.0里不见了。按shift和ctrl多选行的功能倒是都有。区别是,全选后,1.x必须按住ctrl才能取消,直接单击其中一个行,不会取消全选功能,而2.0里只需要任意点击一行,就取消全选,只选中刚才点击的那行。哦,哦,那颜色不要也算是区别吧。2.4. 按顺序,咱们先要把常见功能讲到,让grid支持按列

13、排序其实很简单,需要小小改动一下列模型。var cm = new Ext.grid.ColumnModel( header:编号,dataIndex:id,sortable:true, header:名称,dataIndex:name, header:描述,dataIndex:descn);如果你英语还可以,或者懂得查字典的话(软件翻译也算),那么你就会知道,多出来的这个sortable属性应该是可以排序的意思。现在咱们试一下改动后的效果。看到了没有?编号的标题上有个小小的箭头,表格里的数据也是按照编号做的逆序排列,如此简单,我们就实现了按列排序。很有趣的是,2.0加上sortable以后,1.x那种右键功能也跑回来了,不过它用的不是右键,而是下拉菜单似的实现方式。什么?你问为什么其他两列无法排序?!嗯,好像是因为你还没有给另两列添加sortable属性。怎么加?!按编号那样加就行了。还是不会?!-_-。var cm = new Ext.grid.ColumnModel( header:编号,dataIndex:id,sortable:true, header:名称,dataIndex:name,sortable:true, header:描述,dataIndex:descn,sortable:true);这样所有列都可以排序了。什么?怎么取消排序?!-_-。2.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号