`

ExtJS表格

    博客分类:
  • js
 
阅读更多

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'

         });
     });

分享到:
评论

相关推荐

    ExtJs表格点击超链接获取行的值

    #### 一、ExtJs表格超链接渲染 在ExtJs框架中,我们经常需要在表格(`Ext.grid.Panel`)中显示超链接,并且当用户点击这些超链接时,能够获取到当前行的数据。为了实现这一功能,我们可以使用`renderer`函数对...

    Extjs表格合并代码

    总结,实现ExtJS表格合并代码的关键在于理解表格组件的结构、配置和模板机制,并能妥善处理浏览器之间的兼容性问题。通过细心的CSS调整和对盒模型的深入理解,我们可以创建出在各种浏览器下表现一致的表格应用。在...

    extjs表格Grid比较全面的功能

    ExtJS表格Grid是一款强大的JavaScript组件,它在Web应用中用于展示和操作数据,尤其是在复杂的业务逻辑和大量数据处理中表现出色。这篇博客文章主要探讨了ExtJS Grid的全面功能,结合源码分析和实用工具,帮助开发者...

    一个extjs表格的实例

    extjsDemo2 form panel 一个extjs的demo。1、描绘了表格的属性;2、一个简单的页面布局。供参考。

    Extjs 表格

    下面将详细探讨ExtJS表格的这些功能。 1. **创建表格** 创建一个ExtJS表格首先需要定义一个`Ext.grid.Panel`实例,设置其配置项,包括数据源、列定义、存储配置等。例如: ```javascript var grid = Ext.create...

    获取ExtjS表格的值_ExtJS_3.4cellSelectModel

    资源名称:获取ExtjS表格的值_ ExtJS_3.4 cellSelectModel资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    使用FlexiGrid实现Extjs表格的效果

    FlexiGrid 是一款基于 jQuery 的数据网格插件,它的设计目标是提供类似 ExtJS 的表格效果,但体积更小、更轻便。由于 ExtJS 的庞大和复杂性,有些开发者可能会选择 FlexiGrid 作为替代方案,特别是对于那些对源码...

    extjs表格(表格后台数据读,分页),树(后台数据读取,复选框联动)的基本操作示例

    1. **GridPanel**:GridPanel是ExtJS中用于展示表格数据的组件,它提供了丰富的功能,如排序、筛选、编辑等。在这个例子中,GridPanel被用来从后台动态加载数据,并实现分页。后台数据读取通常涉及Ajax请求,通过Ext...

    使用FlexiGrid实现Extjs表格的效果.doc

    FlexiGrid 是一款基于 jQuery 的数据网格插件,它的设计目标是模仿 ExtJS 的表格功能,但体积更小、更轻便,适用于那些不希望使用庞大框架但仍想获得类似 ExtJS 表格效果的开发者。FlexiGrid 提供了丰富的表格操作...

    ExtJS 表格面板GridPanel完整例子

    ExtJS表格面板(GridPanel)是Sencha Ext JS框架中的一个核心组件,它用于展示大量结构化数据。在本文中,我们将深入探讨如何创建并使用一个完整的ExtJS GridPanel实例,以及与其相关的源码和工具。 首先,让我们...

    extjs表格文本启用选择复制功能具体实现

    下面将详细介绍如何在ExtJS表格中启用文本选择复制功能。 ### 知识点一:默认情况下ExtJS表格文本无法选择的原因 ExtJS Grid组件默认情况下会阻止用户通过鼠标选择表格中的文本,这是通过CSS来实现的。具体来说,...

    Extjs4.2入门详细文档以及表格初级制作

    ### Extjs4.2 入门详细文档及表格初级制作 #### 一、Extjs4.2 下载与安装 **1.1 Extjs4.2 文件结构介绍** 初次接触到Extjs4.2的同学可能会对下载下来的文件夹结构感到困惑。下面我们将详细解释各个目录的作用: ...

    extjs 简单表格

    首先,我们需要理解ExtJS表格的基本结构。表格由多个部分组成,包括Store(数据存储)、Model(数据模型)、Column Model(列模型)和View(视图)。Store负责管理表格的数据,Model定义数据字段,Column Model定义...

    ExtJs表格grid中文排序函数方法

    ExtJs中文排序函数方法详解 在ExtJs框架中,实现中文排序功能是一件非常重要的事情。今天,我们将详细介绍如何使用ExtJs实现中文排序,特别是使用Ext.data.Store.prototype.createComparator()函数来实现中文排序。...

    EXTjs4.0以下合并表格

    在EXTjs 4.0以下的版本中,开发人员可能会遇到合并表格单元格的需求,这在展示复杂数据或者组织信息时非常有用。EXTjs提供了强大的表格网格组件(GridPanel),允许自定义布局和样式,包括单元格的合并。 在EXTjs中...

    ExtJS Grid功能实现

    ExtJS 表格的功能实现,包括单元格编辑,数据的获取。

    Ext实现的拖拽树和表格之间的拖拽

    在本文中,我们将深入探讨如何使用ExtJS框架实现拖拽功能,特别是在树形视图(Tree)和表格视图(Grid)之间的交互。ExtJS是一个强大的JavaScript库,它提供了丰富的用户界面组件,包括可拖拽的元素,这使得在Web...

Global site tag (gtag.js) - Google Analytics