资源描述:
《ext_grid控件精华展现(0积分下载)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、EXTGrid控件精华展现javascriptEXTGrid控件精华展现javascriptEXTGrid控件精华展现javascript2009-05-0609:47无论是界面之美,还是功能之强,ext的表格控件都高居榜首。单选行,多选行,高亮显示选中的行,推拽改变列宽度,按列排序,这些基本功能咱们就不提了。自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。再加上可编辑grid,添加新行,删除一或多行,提示脏数据,推拽改变grid大小,grid之间推拽一
2、或多行,甚至可以在tree和grid之间进行拖拽,啊,这些功能实在太神奇了。更令人惊叹的是,这些功能竟然都在ext表格控件里实现了。呵呵~不过ext也不是万能的,与fins的ecside比较,ext不能锁定列(土豆说1.x里支持锁定列,但是2.0里没有了,因为影响效率。),也没有默认的统计功能,也不支持excel,pdf等导出数据。另外fins说,通过测试ecside的效率明显优于ext呢。:)2.2.让我们搞一个grid出来耍耍吧。光说不练不是我们的传统,让我们基于examples里的例子,来自己搞一个grid看看效果,同时也可以知道一个gri
3、d到底需要配置些什么东西。1.首先我们知道表格肯定是二维的,横着叫行,竖着叫列。跟设计数据库,新建表一样,我们要先设置这个表有几列,每列叫啥名字,啥类型,咋显示,这个表格的骨架也就出来了。ext里,这个列的定义,叫做ColumnModel,简称cm的就是它,它作为整个表格的列模型,是要首先建立起来的。这里我们建立一个三列的表格,第一列叫编号(code),第二列叫名称(name),第三列叫描述(descn)。varcm=newExt.grid.ColumnModel([{header:'编号',dataIndex:'id'},{header:'名称
4、',dataIndex:'name'},{header:'描述',dataIndex:'descn'}]);看到了吧?非常简单的定义了三列,每列的header表示这列的名称,dataIndex是跟后面的东西对应的,咱们暂且不提。现在只要知道有了三列就可以了。1.有了表格的骨架,现在我们要向里边添加数据了。这个数据当然也是二维了,为了简便,我们学习examples里的array-grid.js里的方式,把数据直接写到js里。vardata=[['1','name1','descn1'],['2','name2','descn2'],['3','na
5、me3','descn3'],['4','name4','descn4'],['5','name5','descn5']];很显然,我们这里定义了一个二维数据,(什么?你不知道这是二维数组?快改行吧,这里不是你该待的地方。)这个有五条记录的二维数组,显示到grid里就应该是五行,每行三列,正好对应这id,name,descn,在我们的脑子里应该可以想像出grid显示的结果了,为了让想像变成显示,我们还需要对原始数据做一下转化。2.因为咱们希望grid不只能支持array,还可以支持json,支持xml,甚至支持咱们自己定义的数据格式,ext为咱们
6、提供了一个桥梁,Ext.data.Store,通过它我们可以把任何格式的数据转化成grid可以使用的形式,这样就不需要为每种数据格式写一个grid的实现了。现在咱们就来看看这个Ext.data.Store是如何转换array的。vards=newExt.data.Store({proxy:newExt.data.MemoryProxy(data),reader:newExt.data.ArrayReader({},[{name:'id'},{name:'name'},{name:'descn'}])});ds.load();ds要对应两个部分:p
7、roxy和reader。proxy告诉我们从哪里获得数据,reader告诉我们如何解析这个数据。现在我们用的是Ext.data.MemoryProxy,它是专门用来解析js变量的。你可以看到,我们直接把data作为参数传递进去了。Ext.data.ArrayReader专门用来解析数组,并且告诉我们它会按照定义的规范进行解析,每行读取三个数据,第一个叫id,第二个叫name,第三个descn。是不是有些眼熟,翻到前面cm定义的地方,哦,原来跟dataIndex是对应的。这样cm就知道哪列应该显示那条数据了。唉,你要是能看明白这一点,那你实在是太聪
8、明了。记得要执行一次ds.load(),对数据进行初始化。有兄弟可能要问了,要是我第一列数据不是id而是name,第二列数据不是name