Ext JS表格控件(四)

一、Grid简介

    表格由类Ext.grid.GridPanel定义,继承自Panel,其xtype为Grid。在EXT中,表格控件Grid必须包含列定义信息,并指定表格的数据存储器Store。表格的列信息由类Ext.grid.ColumnModel定义,而表格的数据存储器由Ext.data.Store定义。数据存储器根据解析的数据不同,可分为JsonStore、SimpleStore、GroupingStore等。

    EXT的。表格模型控件都遵循MVC模型,Ext.data.Store可看做是Model模型,Ext.grid.GridPanel中设置的各种监听器可看做Controller控制器,Ext.grid.GridView对应的就是View视图(通常情况下,Ext.grid.GridPanel会自动生成对应的实例而不需要我们自行创建了)。EXT不能锁定列,EXT 1.x里支持锁定列,但是因为效率方面的问题,EXT 2.x里删除了这个功能。

二、制作一个简单的Grid

    表格是二维的,和在数据库中新建表一样。要先设置表的列数、每列的名称和类型,以及如何显示,Grid的结构和数据库表的结构非常相似。

(1)创建列定义

    var  cm  =  new  Ext.grid.ColumnModel(. . .)负责创建表格的列信息。表格的列由column配置属性来描述,简称cm。columns是一个数组,每一行数据元素描述表格的一列信息,表格的列信息包含首部显示文本(header)、列对应的记录集字段(dataIndex)、列是否可排序(sortable)、列的渲染函数(renderer)、宽度(width)、格式化信息(format)等。

(2)添加数据

    表格的结构确定后,就可以向里面添加数据了。var  data  =  . . . 用来定义表格中要显示的数据。

    为简便起见,把数据直接写到JavaScript里,如下面的代码所示(5条记录):

(3)创建数据存储对象(对原始数据进行转换)

    var  store  =  . . . 用来创建一个数据存储对象,这也是GridPanel必须配置的属性,数据存储对象store负责把各种各样的原始数据(如二维数组、JSON对象数组、XML文本等)转换成dExt.data.Record类型的对象。通过Ext.data.Store可以把任何格式的数据转化成Grid可以使用的格式,这样就不需要为每种数据格式写一个对应的实现。

    store对应两个部分:proxy(指获取数据的方式)和reader(指如何解析这一堆数据)。其中Ext.data.MemoryProxy是专门用来解析JavaScrript变量的,在定义MemoryProxy对象时,只需要把定义的data作为参数传递进去即可;Ext.data.ArrayReader专门用来解析数组,并且告诉我们它会按照定义的规范进行解析,定义3个名称(和cm里的dataIndex相对应):id、name和descn。这样,cm就知道column是如何与store中的数据相对应的。注意,要执行一次store.load(),以对数据进行初始化。

(4)装配在一起

   表格的列模型定义好了,原始数据和数据的转换也已经完成,剩下的只需要把它们装配在一起,到此Grid就创建成功了。

    var  grid  =  new  Ext.grid.GridPanel({

        renderTo:'grid',

        store:store,

        cm:cm

    });

    Ext.grid.Grid的renderTo属性指示EXT将表格渲染到什么地方,所以,在HTML里应该有一个

与之对应。

》》》》》》》》》:例子:

Ext JS表格控件(四)_第1张图片

》》》Ext.grid.GridPanel完整代码:

    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‘,‘nam5‘,’descn5‘]

    ];

    var  store  =  new  Ext.data.Store({

        proxy:new   Ext.data.MemoryProxy(data),

        reader:new  Ext.data.ArrayReader({},[

            {name:’id‘},

            {name:’name‘},

            {name:’descn‘}

        ])

    });

    store.load();

    var  grid  =  new  Ext.grid.GridPanel({

        renderTo:’grid‘,

        store:store,

        cm:cm

    });

三、Grid常用功能

》》》在GridPanel中的配置:

enableColumnMove:拖放列;

enableColumnResize:改变列的宽度;

stripeRows:斑马线效果;

loadMask:读取数据时的遮罩和提示功能;

》》》在ColumnModel中配置:

width:自定义每列的宽度;

sortable:让Grid支持按列排序;

renderer:Ext.util.Format.dataRenderer('Y年m月d日');格式化日期格式的数据;

renderer:function(value){代码};或者定义一个函数:function  函数名(value){代码}及renderer:函数名;在单元格里显示带颜色的字、图片和按钮;

new  Ext.grid.RowNmberer():自动显示行号;

》》》在Store中配置:

sortInfo:{field:“表格中的某一列”,direction:“ASC(升序)/DESC(降序)”};

dataFormat:把得到的字符串转换为相应的日期格式(Y是年,m是月,d是日期,H是小时,i是分钟,s是秒);

》》》复杂配置的功能如下:

复选框的配置:首先在ColumnModel外边创建一个CheckSelectionModel,然后在ColumnModel和GridPanel中进行对应;

行选择模型:new  Ext.grid.RowSelectionModel({singleSelect:true}),在定义Ext.grid.GridPanel时,鼠标单击时按住Shift或Ctrl键就可以选择多行,如果只希望选择一行,需要设置singleSelect参数;

表格试图-Ext.grid.GridView:viewConfig中的会在GridView创建时作为初始化参数传递给GridView;

表格分页:EXT提供了 方便的集成分页工具条的方式; (bbar-下方的工具栏和tbar-上方的工具栏);

通过后台脚本获得分页数据:写后台脚本,让EXT与后台进行数据交互;

前台排序:是指一次性从后台把所有数据都读取到客户端,然后由客户端自动判断每次显示多少条数据。这样分页时就不用再去后台读取数据了,这对于小数据量的分页是非常有利的。Ext里没有提供这样的功能,Grid仅仅是把得到的所有数据一次性显示到表格里,无论pagesize设置多少都不会起作用;在EXT2.0的examples/locale/目录下提供了一个PagingMemoryProxy.js的扩展。

后台排序:在默认情况下,Grid只能对当前页的数据进行排序,如果想要对所有数据进行排序,则需要把排序信息提交到后台,由后台将排序信息组装到SQL里,然后再由后台将处理好的数据返回给前台;

可编辑表格控件-EditorGrid:可以直接在表格里执行添加、删除、修改和查找等操作,然后一次性保存;

限制输入数据的类型:NumberField限制只能输入数字,ComboBox限制只能输入备选项,DateField是选择日期,Checkbox则是从true和false中选择其一,等等;

属性表格控件-PropertyGrid:扩展子EditorGridPanel,可以直接编辑右边的内容,注意:只有右边的,即使你单机左边的单元格,编辑器也只会出现在右边;

分组表格控件-Group:Ext.grid.GroupingGrid分组表格就是在普通表格的基础上,根据某一列的数据将表格中的数据分组显示的表格控件;

分组表格试图-Ext.grid.GroupingView:继承自Ext.grid.GridView,是分组表格的显示视图,实际应用中需要与Ext.data.GroupingStore配合使用;

可拖放的表格:拖放表格大小、表格之间的拖放、表格与树之间的拖放等;

转载于:https://my.oschina.net/tobeexpertismydream/blog/2990500

你可能感兴趣的:(Ext JS表格控件(四))