`
古镇灵狐
  • 浏览: 3929 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Extjs4.x GridPanel用法详解

阅读更多

参考资料:http://www.qeefee.com/article/extjs-grid-in-detail

 

创建GridPanel

要使用GridPanel,首先要定义Store

// 创建store
var store = Ext.create("Ext.data.Store", {
    fields: [{
        name: 'name',  // 与gird中columns的dataIndex匹配
        type: 'string', // 字段的数据类型
        mapping: 'name' // 在Ext.data.Reader中创建记录时将json对象中指定属性值映射到此字段
    },{
        name: 'age',
        type: 'int',
        mapping:'age'
    },{
        name: 'phone',
        type: 'string',
        mapping:'phone'
    }],
    autoLoad: true,
    pageSize: 5,
    proxy: {
        type: "ajax",
        url: "queryUsers.action",
        reader: {
            root: "rows"
        },
        extraParams: {state : 2}
    },
    sorters: [{
	property: "age",//排序字段
	direction: "asc"
    }]
});
// 创建grid
var grid = Ext.create("Ext.grid.Panel", {
    title: '用户列表',
    xtype: "grid",
    store: store,
    width: 500,
    height: 200,
    margin: 30,
    columnLines: true,
    hidden : false,
    viewConfig : {
	forceFit : true
    },
    renderTo: Ext.getBody(),
//  renderTo: userDiv,  // 将grid填充到jsp页面的div中,div的id为userDiv
    selModel: {
        injectCheckbox: 0,
        mode: "SIMPLE",     //"SINGLE"/"SIMPLE"/"MULTI"
        checkOnly: true     //只能通过checkbox选择
    },
    selType: "checkboxmodel",
    columns: [{
        text: '姓名',
        dataIndex: 'name'
    },{
        text: '年龄',
        dataIndex: 'age',
        xtype: 'numbercolumn',
        format: '0',
        editor: {
            xtype: "numberfield",
            decimalPrecision: 0,
            selectOnFocus: true
        }
    },{
        text: '电话',
        dataIndex: 'phone',
        editor: "textfield"
    }],
    plugins: [
        Ext.create('Ext.grid.plugin.CellEditing', {
            clicksToEdit: 1
        })
    ],
    listeners: {
        itemdblclick: function (me, record, item, index, e, eOpts) {
            //双击事件的操作
        }
    },
    bbar : new Ext.PagingToolbar( {
	store : store,
	displayInfo : true,
	nextText : '下一页',
	lastText : '最后一页',
	firstText : '第一页',
	prevText : '上一页',
	refreshText : '刷新',
	displayMsg : '显示流程实例第 {0}条 - 第 {1}条,总共{2}条',
	emptyMsg : "没有数据"
    }),
    tbar :  Ext.create("Ext.Toolbar", {
	items:[ {
	    text : "查看用户详细信息",
		handler : lookDetail  //方法名后面不能加括号,lookDetail()的写法是错误的。
	}, {
	    text : "查看用户子节点",
	        handler : lookChildren
	}]
    })
});
function lookDetail() {
    //得到选中的行数据
    var record = grid.getSelectionModel().getLastSelected();
    var name = record.data.name;
    //其他操作...
}
function lookChildren() {
    //...
}

列 Columns配置项

Extjs GridPanel的列有多种类型,例如:文本列、数字列、日期列、选择框列、操作列等。我们可以通过xtype来指定不同的列类型。

下面是列的常用配置项:

  • xtype:列类型
  • text:列头显示的文字
  • dataIndex:绑定的字段名
  • width:宽度
  • flex:自动适应的宽度
  • sortable:是否可排序,默认为是
  • hideable:是否可隐藏,默认为是
  • locked:锁定列,将列锁定在grid的开头,当grid出现滚动条的时候该属性比较有用。默认为否
  • lockable:是否可锁定,默认为否
  • format:格式化字符串,常用于日期、数字的格式化。日期:'Y-m-d';日期时间:'Y-m-d H:i:s';数字:'0,000.00'(带有千位分隔符、保留两位小数)、'0.00'(保留两位小数),'0'(不保留小数)
  • renderer:自定义绘制方法,可以是Ext.util.Format中定义好的方法名称,也可以是自定义否function,该方法接收下面的参数:value、metadata、record、rowIndex、colIndex、store、view,并需要一个用来显示的返回值。
  • editor:编辑器,当使用编辑插件的时候才会起作用。

 

Extjs GridPanel行选择模型(SelectionModel)

控制Extjs GridPanel行选择模型的两个配置项是selType和selModel。默认情况下,selType为rowmodel,对应的Ext.selection.Model。这种选择模型不会在grid中添加复选框,它通过点击行进行选中,默认为多选“MULTI”。

如果我们要使用复选框来选择行,我们需要使用下面的配置:

selType: "checkboxmodel", //rowmodel、checkboxmodel

 然后,我们可以通过selModel来配置selType:

selModel: {
    injectCheckbox: 0,
    mode: "SIMPLE",     //"SINGLE"/"SIMPLE"/"MULTI"
    checkOnly: true     //只能通过checkbox选择
},

 

 

Extjs GridPanel行选择

除了界面操作来选中行,我们还可以通过代码来选中行:

//选择行,并保持其他行的选择状态
grid.getSelectionModel().select(records, true);
//选择所有
grid.getSelectionModel().selectAll();
//根据row index选择
grid.getSelectionModel().selectRange(startRow, endRow, true)

 

 

Extjs GridPanel获取选中行

获取选中行,仍然需要通过SelectionModel来完成:

var records = grid.getSelectionModel().getSelection();

var records = grid.getSelectionModel().getLastSelected();

 

 

Extjs GridPanel显示行号

默认情况下Extjs GridPanel是不显示行号的,我们需要手动添加行号列。

 

columns: [{ 
    xtype: "rownumberer",
    text: "序号",
    width:40
},{
    text: '姓名',
    dataIndex: 'name'
},{
    text: '年龄',
    dataIndex: 'age',
    xtype: 'numbercolumn',
    format: '0',
    editor: {
        xtype: "numberfield",
        decimalPrecision: 0,
        selectOnFocus: true
    }
},{
    text: '电话',
    dataIndex: 'phone',
    editor: "textfield"
}]

 我们可以设置行号的列头和宽度。

 

Extjs GridPanel异步加载数据

Extjs GridPanel的异步加载数据是通过Store来实现的。

异步加载通常采用ajax代理,例如我们代码中用到的:

 

//创建store
var store = Ext.create("Ext.data.Store", {
    fields: [{
        name: 'name',  // 与gird中columns的dataIndex匹配
        type: 'string', // 字段的数据类型
        mapping: 'name' // 在Ext.data.Reader中创建记录时将json对象中指定属性值映射到此字段
    },{
        name: 'age',
        type: 'int',
        mapping:'age'
    },{
        name: 'phone',
        type: 'string',
        mapping:'phone'
    }],
    autoLoad: true,
    pageSize: 5,
    proxy: {
        type: "ajax",
        url: "queryUsers.action",
        reader: {
            root: "rows"
        },
        extraParams: {state : 2}
    },
    sorters: [{
	property: "age",//排序字段
	direction: "asc"
    }]
});

 服务器端返回的数据格式如下:

{
    "rows": [
      {
          "name": "Tom",
          "age": 12,
          "phone": "1233455"
      },
      {
          "name": "Jerry",
          "age": 12,
          "phone": "1233455"
      },
      {
          "name": "Sinbo",
          "age": 12,
          "phone": "1233455"
      },
      {
          "name": "Jack",
          "age": 12,
          "phone": "1233455"
      },
      {
          "name": "Johnson ",
          "age": 12,
          "phone": "1233455"
      }
    ],
    "total": 5
}

 手动加载:

store.load();

 ajax在这里是异步加载,如果要处理返回数据,需要用回调函数

store.load({
    callback: function (records, operation, success) {
        if (success) {
            //对返回数据处理
        }
    }
});

 

ExtJS 其实已经为我们添加了一些参数,包括 page、start和limit。这些参数是从哪儿来的呢?

在使用ajax进行请求的时候,ajax代理会调用自身的read方法,该方法的第一个参数是Ext.data.Operation 类型,它用来配置我们如何进行请求。我们在load 方法中可以通过配置项传递一些参数,load在调用read方法时将这些参数传递过去,read则会根据这些参数生成Ext.data.Operation 的一个实例。所以,我们可以这样来传递参数:

 

store.load({
    page: 2,
    limit: 10,
    params: {
        name: 'Jack'  //其他参数
    },
    callback: function (records, operation, success) {
        if (success) {
           //...
        }
    }
});

 

Extjs GridPanel分页

当GridPanel中数据量大的时候,我们就需要使用分页了。

分页的实现由两部来完成,首先是在Store中添加pageSize配置项,用来确定每页显示多少行数据;然后需要为GridPanel添加PagingToolbar。

1. Store添加pageSize配置项

 

在分页参数加上之后,Extjs在执行ajax请求的时候会添加三个参数: 

  • page:当前页
  • start:起始行的行号
  • limit:每页数据行数,默认为25;这个参数值就是我们设置的pageSize

2. GridPanel添加PagingToolbar

 

 在完成这两项配置以后,GridPanel就可以使用分页了。

 

Extjs GridPanel列编辑

Extjs GridPanel可以方便的实现列编辑。要实现这个功能需要两步:

1. 添加GridPanel的编辑插件

 

plugins: [
    Ext.create('Ext.grid.plugin.CellEditing', {
        clicksToEdit: 1
    })
],

 2. 为需要编辑的列指定编辑器

columns: [
    { xtype: "rownumberer", text: "序号", width:40 },
    { text: '姓名', dataIndex: 'name' },
    {
        text: '年龄', dataIndex: 'age', xtype: 'numbercolumn', format: '0',
        editor: {
            xtype: "numberfield",
            decimalPrecision: 0,
            selectOnFocus: true
        }
    },
    { text: '电话', dataIndex: 'phone', editor: "textfield" }
]

 编辑器可以是一个field的配置,也可以是一个xtype。

 

对于编辑后的单元格,会在左上角出现一个红色的标识,说明该数据是编辑过的,要想去掉这个红色箭头,需要调用record的commit()方法。

 

grid.on('edit', function (editor, e) {
    // commit the changes right after editing finished
    e.record.commit();
});

 除了单元格编辑外,Extjs还支持行编辑功能,只需要将插件替换为RowEditing即可,此处不再进行演示。

 

Extjs GridPanel选中单元格内容

在默认情况下,Extjs GridPanel不允许进行选中单元格中的内容,由于不能选中,我们就不可能来复制单元格中的内容。如果要实现这种功能,我们需要通过viewConfig来实现。

代码如下:

viewConfig:{
    stripeRows:true,//在表格中显示斑马线
    enableTextSelection:true //可以复制单元格文字
}

 

禁止显示列头部右侧菜单

Extjs GridPanel的列,当我们点击列头的时候,会出现一个菜单:

image

如果我们要禁用这个菜单,可以将每个column定义属性menuDisabled指定为true,代码如下:

{header: 'Idno', dataIndex: 'idno', width:150,menuDisabled:true}

 

Extjs GridPanel 事件

itemclick( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e )         //鼠标的单击事件

itemcontextmenu( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e )       //鼠标的右键事件

itemdblclick( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e )              //鼠标的双击事件

itemmousedown( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e )       

itemmouseenter( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e )

itemmouseleave( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e )

( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e )

调用方法:

直接调用,创建grid时添加listeners

listeners:{

 'itemclick':function(view,record,item,index,e){

}

 

后续添加

grid.addListener('itemclick',click,this);

function click(view,record,item,index,e){

if (typeof (record.raw) != 'undefined') {
        name= record.raw.NAME;           //获取单击行的相应数据
        path= record.raw.PATH;
        num = index;

}

}

分享到:
评论

相关推荐

    Ext.grid.GridPanel属性祥解

    `Ext.grid.GridPanel`是ExtJS中用于展示表格数据的核心组件之一。它提供了丰富的配置选项和方法来帮助开发者灵活地控制表格的表现形式及功能。对于初学者或者希望深入理解`GridPanel`特性的Web开发人员来说,掌握其...

    ExtJs选中var editor = new Ext.ux.grid.RowEditor详解

    ### ExtJs选中 `var editor = new Ext.ux.grid.RowEditor` 详解 在Web开发领域,特别是使用ExtJs框架进行复杂用户界面构建时,`RowEditor` 是一个非常实用的功能,它允许用户直接在表格行内编辑数据,极大地提高了...

    GridPanel属性详解

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

    ExtJS.in.Action

    第三章“Events, Components, and Containers”深入讨论了ExtJS中的事件处理机制,组件和容器的概念及其使用方法。这三者是ExtJS框架的核心组成部分,了解它们的工作原理对于有效地开发Web应用至关重要。例如,事件...

    通过Servlet让Extjs GridPanel 显示数据库数据.docx

    ### 通过Servlet让Extjs GridPanel显示数据库数据 在现代Web开发中,将数据库中的数据动态展示在前端界面上是一项常见的需求。本文档主要介绍如何通过Servlet技术配合Extjs框架中的GridPanel组件来实现这一功能。 ...

    extjs gridpanel例子和简单应用

    ### ExtJS GridPanel 使用详解及示例 #### 一、引言 在现代Web应用程序开发中,特别是基于ExtJS框架的应用程序中,`GridPanel`是处理表格数据展示的一个非常重要的组件。它不仅可以帮助开发者轻松地展示数据,还...

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能.doc

    5. **ExtJS前端展示:** 利用ExtJS的GridPanel、FormPanel等组件,结合AJAX技术,实现数据的动态加载和更新。 #### 四、总结 通过上述技术栈的集成,可以构建出一个功能完善、易于扩展的企业级应用系统。其中,...

    extjs4 record mapping参数解释

    在本篇文章中,我们将深入探讨 ExtJS 4 中 `record mapping` 参数的相关概念与使用方法。这是一项重要的功能,能够帮助开发者更好地管理数据模型与数据交互。通过理解这些概念,可以更加高效地开发出功能丰富的应用...

    ExtJs官方网站中文的入门指南 javascript

    通过本文档的学习,您已经掌握了ExtJs的基本使用方法,包括环境搭建、核心概念理解、基本控件使用以及Ajax通信等方面的知识。希望这些内容能够帮助您顺利入门ExtJs,为后续更深入的学习打下坚实基础。

    Extjs Grid 用法 pdf版

    本文介绍了 Extjs Grid 组件的基本使用方法,包括如何定义 `ColumnModel`、如何创建 `Store` 以及如何处理不同格式的数据源。此外,还讨论了如何在 Grid 中添加 CheckBox 以增强交互性。通过掌握这些基本概念,您...

    Spket - ExtJS提示工具,附规范文件

    **Spket - ExtJS提示工具详解** Spket是一款强大的JavaScript开发工具,特别为Web开发者提供了对JavaScript库,如ExtJS的智能代码提示和支持。这款工具极大地提升了开发效率,通过自动补全、错误检测和代码导航等...

    Extjs4之MVC应用架构

    ### Extjs4之MVC应用架构详解 #### 一、MVC模式介绍 MVC(Model-View-Controller)模式是一种软件设计模式,用于将应用程序的业务逻辑、数据表示和用户交互分离,使得应用程序更加模块化,易于维护和扩展。在ExtJS...

    Extjs 性能优化 High Performance ExtJs

    ### Extjs 性能优化详解 #### 一、前言 在前端开发中,Extjs 是一款非常强大的 UI 框架,它提供了丰富的组件和便捷的开发方式,深受开发者们的喜爱。然而随着应用程序复杂度的提升,如何提高 Extjs 的性能成为了一...

    ExtJS增删改查

    ### ExtJS 增删改查详解 #### 一、ExtJS Grid的增删改查功能概述 在ExtJS框架中,Grid是一个非常关键的组件,主要用于展示表格数据,并支持数据的增删改查等基本操作。对于大多数Web应用程序而言,这种功能几乎是...

    extjs打印功能

    ### ExtJS 打印功能详解 #### 一、概述 ExtJS 是一款强大的 JavaScript 框架,用于构建复杂的前端应用程序。它提供了丰富的组件库,包括数据网格(grid)、窗体(form)等,并且支持高级功能如拖放、动态加载等。在...

    ExtJs grid多选时获取选中的所有值

    ### ExtJs Grid 多选及获取选中值详解 #### 一、背景介绍 在Web应用开发中,ExtJs 是一款非常强大的JavaScript框架,它能够帮助开发者快速构建复杂的用户界面。其中,Grid Panel(简称 Grid)是ExtJs中最常用的一个...

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

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

    ExtJs中文教程

    - 结合实际案例介绍XTemplate的使用方法。 #### 八、Extjs组件结构 1. **组件结构解析** - 解释ExtJs组件体系结构的复杂性。 2. **组件分类** - 分类介绍不同类型的组件及其用途。 3. **组件生命周期** - 描述...

    extjs入门案例大全

    《EXTJS入门案例详解》 EXTJS是一款基于JavaScript的富客户端应用框架,它提供了一整套组件和工具,用于构建功能强大的Web应用程序。本篇将通过详细的案例介绍EXTJS的基本用法,帮助初学者快速入门。 首先,我们来...

Global site tag (gtag.js) - Google Analytics