`
jyangzi5
  • 浏览: 212331 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

GridPanel

    博客分类:
  • Ext
阅读更多
ExtJS3.0之基本表格GridPanel
ExtJS中的表格功能非常强大,包括了排序、缓存、拖动、隐藏某一列、自动显示行号、列汇总、单元格编辑等实用功能。
    表格由类Ext.grid.GridPanel定义,继承自Panel,其xtype为grid。ExtJS中,表格Grid必须包含列定义信息,并指定表格的数据存储器Store。表格的列信息由类Ext.grid.ColumnModel定义、而表格的数据存储器由Ext.data.Store定义,数据存储器根据解析的数据不同分为SimpleStroe、JsonStore、GroupingStore等。
    1、首先来看最简单的使用表格(SimpleStroe)的代码:
 /// <reference path="vswd-ext_2.0.2.js" />
Ext.onReady(function(){ 
    var data=[ [1, 'EasyJWeb', 'EasyJF','www.easyjf.com'],
            [2, 'jfox', 'huihoo','www.huihoo.org'], 
            [3, 'jdon', 'jdon','www.jdon.com'],
            [4, 'springside', 'springside','www.springside.org.cn'] ];
    var store=new Ext.data.SimpleStore({data:data,fields:["id","name","organization","homepage"]});
    var grid = new Ext.grid.GridPanel({
        renderTo:"hello",
        title:"中国Java开源产品及团队",
        height:150,
        width:600, 
        columns:[{header:"项目名称",dataIndex:"name"},
        {header:"开发团队",dataIndex:"organization"},
        {header:"网址",dataIndex:"homepage"}],
        store:store,
        autoExpandColumn:2
    }); 
});

   

这个地方法应该注意,在HTML页面中有id为hello的标签,如:<div id="hello"></div>

否则将会报错:dom为空或不是对象。这个问题让我整了好久。

 

执行上面的代码,可以得到一个简单的表格,如下图所示:

    上面的代码中,第一行“var data=…”用来定义表格中要显示的数据,这是一个[][]二维数组;第二行“var store=…”用来创建一个数据存储,这是GridPanel需要使用配置属性,数据存储器Store负责把各种各样的数据(如二维数组、JSon对象数组、xml文本)等转换成ExtJS的数据记录集Record,关于数据存储器Store我们将在下一章中作专门介绍。第三行“var grid = new Ext.grid.GridPanel(…)”负责创建一个表格,表格包含的列由columns配置属性来描述,columns是一数组,每一行数据元素描述表格的一列信息,表格的列信息包含列头显示文本(header)、列对应的记录集字段(dataIndex)、列是否可排序(sorable)、列的渲染函数(renderer)、宽度(width)、格式化信息(format)等,在上面的列子中只用到了header及dataIndex。
    下面我们看简单看看表格的排序及隐藏列特性,简单修改一下上面的代码,内容如下:

 Ext.onReady(function(){ 
    var data=[ [1, 'EasyJWeb', 'EasyJF','www.easyjf.com'],
            [2, 'jfox', 'huihoo','www.huihoo.org'], 
            [3, 'jdon', 'jdon','www.jdon.com'],
            [4, 'springside', 'springside','www.springside.org.cn'] ];
    var store=new Ext.data.SimpleStore({data:data,fields:["id","name","organization","homepage"]});
    var colM=new Ext.grid.ColumnModel([{header:"项目名称",dataIndex:"name",sortable:true},
                                    {header:"开发团队",dataIndex:"organization",sortable:true},
                                    {header:"网址",dataIndex:"homepage"}]);
        var grid = new Ext.grid.GridPanel({
            renderTo:"hello",
            title:"中国Java开源产品及团队",
            height:200,
            width:600, 
            cm:colM,
            store:store,
            autoExpandColumn:2
    }); 
});

    直接使用new Ext.grid.ColumnModel来创建表格的列信定义信息,在“项目名称“及“开发团队”列中我们添加了sortable为true的属性,表示该列可以排序,执行上面的代码,我们可以得到一个支持按“项目名称“或“开发团队”的表格

 

    另外,每一列的数据渲染方式还可以自己定义,比如上面的表格中,我们希望用户在表格中点击网址则直接打开这些开源团队的网站,也就是需要给网址这一列添加上超级连接。下面的代码实现这个功能:

 function showUrl(value)
{
    return "<a href=\"http://"+value+"\" target=\"_blank\">"+value+"</a>";
}
Ext.onReady(function(){ 
    var data=[ [1, 'EasyJWeb', 'EasyJF','www.easyjf.com'],
            [2, 'jfox', 'huihoo','www.huihoo.org'], 
            [3, 'jdon', 'jdon','www.jdon.com'],
            [4, 'springside', 'springside','www.springside.org.cn'] ];
    var store=new Ext.data.SimpleStore({data:data,fields:["id","name","organization","homepage"]});
    var colM=new Ext.grid.ColumnModel([{header:"项目名称",dataIndex:"name",sortable:true},
                                {header:"开发团队",dataIndex:"organization",sortable:true},
                                {header:"网址",dataIndex:"homepage",renderer:showUrl}]);
    var grid = new Ext.grid.GridPanel({
        renderTo:"hello",
        title:"中国Java开源产品及团队",
        height:200,
        width:600, 
        cm:colM,
        store:store,
        autoExpandColumn:2
    }); 
});

    上面的代码跟前面的示例差别不大,只是在定义“网址”列的时候多了一个renderer属性,即{header:"网址",dataIndex:"homepage",renderer:showUrl}。showUrl是一个自定义的函数,内容就是根据传入的value参数返回一个包含<a>标签的html片段。运行上面的代码显示结果如下图所示:

    自定义的列渲染函数可以实现在单元格中显示自己所需要的各种信息,只是的浏览器能处理的html都可以。
    2、除了二级数组以外,表格还能显示其它格式的数据吗?答案是肯定的,下面假如我们的表格数据data定义成了下面的形式(JsonStore):

     var data=[{id:1,
        name:'EasyJWeb',
        organization:'EasyJF',
        homepage:'www.easyjf.com'},
        {id:2,
        name:'jfox',
        organization:'huihoo',
        homepage:'www.huihoo.org'}, 
        {id:3,
        name:'jdon',
        organization:'jdon',
        homepage:'www.jdon.com'},
        {id:4, 
        name:'springside',
        organization: 'springside',
        homepage:'www.springside.org.cn'}
    ];

    也就是说数据变成了一维数组,数组中的每一个元素是一个对象,这些对象包含name、organization、homepage、id等属性。要让表格显示上面的数据,其实非常简单,只需要把store改成用Ext.data.JsonStore即可,代码如下:

     var store=new Ext.data.JsonStore({data:data,fields:["id","name","organization","homepage"]});
    var colM=new Ext.grid.ColumnModel([{header:"项目名称",dataIndex:"name",sortable:true},
                        {header:"开发团队",dataIndex:"organization",sortable:true},
                        {header:"网址",dataIndex:"homepage",renderer:showUrl}]);
    var grid = new Ext.grid.GridPanel({
        renderTo:"hello",
        title:"中国Java开源产品及团队",
        height:200,
        width:600, 
        cm:colM,
        store:store,
        autoExpandColumn:2
    });

    上面的代码得到的结果与前面的一样。

    3、当然,表格同样能显示xml格式的数据,假如上面的数据存放成dataXml.xml文件中,内容如下:

 <?xml version="1.0" encoding="UTF-8"?>
<dataset>
 <row>
  <id>1</id>
  <name>EasyJWeb</name>
  <organization>EasyJF</organization>
  <homepage>www.easyjf.com</homepage>
 </row>
 <row>
  <id>2</id>
  <name>jfox</name>
  <organization>huihoo</organization>
  <homepage>www.huihoo.org</homepage>
 </row>
 <row>
  <id>3</id>
  <name>jdon</name>
  <organization>jdon</organization>
  <homepage>www.jdon.com</homepage>
 </row>
 <row>
  <id>4</id>
  <name>springside</name>
  <organization>springside</organization>
  <homepage>www.springside.org.cn</homepage>
 </row>
 </dataset>

    为了把这个xml数据用ExtJS的表格Grid进行显示,我们只需要把store部分的内容调整成如下的内容即可:

     var store=new Ext.data.Store({
    url:"dataXml.xml", 
    reader:new Ext.data.XmlReader({
        record:"row"},
        ["id","name","organization","homepage"])
    });

    其它的部分不用改变,完整的代码如下:

 
function showUrl(value)
{
    return "<a href='http://"+value+"' target='_blank'>"+value+"</a>";
}
Ext.onReady(function(){ 
    var store=new Ext.data.Store({
    url:"dataXml.xml", 
    reader:new Ext.data.XmlReader({
        record:"row"},
        ["id","name","organization","homepage"])
    }); 
    var colM=new Ext.grid.ColumnModel([{header:"项目名称",dataIndex:"name",sortable:true},
                                {header:"开发团队",dataIndex:"organization",sortable:true},
                                {header:"网址",dataIndex:"homepage",renderer:showUrl}]);
    var grid = new Ext.grid.GridPanel({
        renderTo:"hello",
        title:"中国Java开源产品及团队",
        height:200,
        width:600, 
        cm:colM,
        store:store,
        autoExpandColumn:2
        }); 
        store.load(); 
});

    store.laod()是用来加载数据,执行上面的代码产生的表格与前面的完全一样。

 

最后要注意的是:解析XML是可以的,但是必须将项目部署在WEB服务器中,才能显示出解析出来的数据,如果只打的是静态页面,则只能看到页面表格框架,并不能得到数据。因为Sote组件接受一个参数url,如果设置url,则ExtJS会创建一个与服务器交互的Ext.data.HttpProxy对象,该对象通过指定的Connection或Ext.Ajax.request来向服务端发送请求,从而可以读取到服务器端的数据。

分享到:
评论

相关推荐

    Ext的gridpanel控件二次加载问题

    在Ext JS这个强大的JavaScript框架中,GridPanel是一个非常重要的组件,用于展示数据表格。然而,在实际应用中,可能会遇到一个常见的问题:当GridPanel需要进行第二次加载时,数据或者功能可能会丢失。这个问题主要...

    ExtJs GridPanel双击事件获得双击的行

    在ExtJs中,GridPanel是用于展示数据的常用组件,它可以提供丰富的功能,如排序、分页、筛选等。在实际应用中,我们经常需要监听用户的交互行为,比如双击行进行进一步的操作。本篇文章将深入讲解如何在ExtJs ...

    Ext GridPanel 中实现加链接操作

    ### Ext GridPanel 中实现加链接操作 在前端开发领域中,Ext JS 是一款非常流行的 JavaScript 框架,用于构建企业级的 Web 应用程序。Ext GridPanel 是该框架中的一个重要组件,常用于展示表格数据。本文将详细介绍...

    ext.net 动态创建gridpanel

    GridPanel 是 ExtJS(Ext.NET 的基础)中的一个重要组件,用于展示数据表格。在这个场景中,我们将深入探讨如何使用Ext.NET代码动态创建GridPanel,并在各种窗口中灵活展示。 1. **动态创建GridPanel**: 在Ext...

    给Extjs的GridPanel增加“合计”行

    在EXTJS中,GridPanel是一种常用的组件,用于展示表格数据。在实际应用中,我们经常需要在GridPanel底部显示一行“合计”行,以便对某一列或多列的数据进行求和或其他统计操作。这篇博文“给Extjs的GridPanel增加...

    EXTJSEXT实例GridPanel.

    这个实例"EXTJSEXT实例GridPanel"旨在教授如何在EXTJS中创建并使用GridPanel。 GridPanel是EXTJS中的一个核心组件,它允许开发者以网格形式展示数据,支持多种功能,如排序、分页、筛选、编辑等。在EXTJS中,...

    Gridpanel多表头的扩展

    在EXTJS框架中,Gridpanel是用于展示数据的常用组件,它提供了丰富的功能,如排序、分页、筛选等。当我们需要对数据进行更复杂的展示,例如按类别或层级分类时,多表头(Multi-Level Headers)就显得尤为重要。标题...

    Ext.net实现GridPanel拖动行、上移下移排序功能DEMO

    对于GridPanel中拖动选中行排序的实现,网上有不少ExtJs实现的例子,但是没有找到使用Ext.net实现的,正好最近有个需求要使用,干脆来写一个。 DEMO功能说明: 1、拖动GridPanel选中行到新位置排序。 2、在拖动结束...

    GridPanel中的单元格不能选中复制的解决方法

    "GridPanel中的单元格不能选中复制的解决方法" Ext.grid.GridPanel 是一个功能强大且广泛使用的Grid控件,但是它存在一个很大的缺陷:单元格的内容不能选中,没法选中就没法复制,这给用户带来了很多不便。这个...

    Extjs入门教程(treePanel和GridPanel)

    在集成TreePanel和GridPanel时,可能涉及到的概念有:将TreePanel的节点与GridPanel的数据关联,实现点击树节点时动态加载或更新GridPanel的数据,以及可能的父子数据联动操作。 在实际应用中,你可能会学习到以下...

    改变gridpanel的行颜色

    ### 改变GridPanel的行颜色 在使用GridPanel组件进行数据展示时,为了提高可读性和用户体验,我们经常需要对表格中的某些行或单元格进行颜色上的区分。本文将详细介绍如何通过不同的方法来实现这一功能,包括在加载...

    Ext.grid.GridPanel属性祥解

    ### Ext.grid.GridPanel属性详析 #### 一、Ext.grid.GridPanel概述 `Ext.grid.GridPanel`是ExtJS中用于展示表格数据的核心组件之一。它提供了丰富的配置选项和方法来帮助开发者灵活地控制表格的表现形式及功能。...

    Extjs让Gridpanel组件自动滚屏

    后来公司让改变一个Gridpanel的展现方式,要求实现滚屏的效果。于是我就开始找API相关的功能了。找了很久,也没有找到框架的相应控制方法,然后在网上找了很久,也没有找到有人给去示例,无奈就只能自己写JS来控制...

    ExtJS 表格面板GridPanel完整例子

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

    gridpanel常用操作

    在本文中,我们将深入探讨`GridPanel`在Extnet框架中的常见操作,包括选择行、前后台方法调用、增删行以及弹出窗体的实现方式。这些操作是开发Web应用程序时处理数据表单和数据展示的关键部分。 首先,我们来看如何...

    ExtJS的GridPanel导出excel文件

    ExtJS的GridPanel导出excel文件,方便快捷易懂!

    Ext实现GridPanel内嵌行内嵌表格(RowExpander)

    在本文中,我们将深入探讨如何使用ExtJS库中的RowExpander插件来实现在GridPanel中内嵌行内的表格。ExtJS是一个强大的JavaScript框架,它提供了丰富的组件和功能,用于构建复杂的Web应用程序。RowExpander插件是...

    EXTJS_GridPanel_ColumnModel_列的宽度随数据变化而变化

    EXTJS的GridPanel是其组件库中的核心组件之一,用于展示数据网格,广泛应用于Web应用的数据展示。在EXTJS中,ColumnModel是用来定义GridPanel列结构和行为的关键部分。这篇博客"EXTJS_GridPanel_ColumnModel_列的...

    gridPanel添加按钮

    在IT行业中,尤其是在Web开发领域,`gridPanel`通常指的是数据网格组件,它用于展示和管理大量的结构化数据。在本话题中,我们讨论的是如何在`gridPanel`中添加按钮,这涉及到前端用户界面的设计和交互。`gridPanel`...

    Ext.grid.GridPanel 删除线

    Ext.grid.GridPanel 删除线 放到example文件夹下运行

Global site tag (gtag.js) - Google Analytics