Extjs GridPanel 提供了非常强大数据表格功能,在GridPanel可以展示数据列表,可以对数据列表进行选择、编辑等。在之前的Extjs MVC开发模式详解中,我们已经使用到了GridPanel,今天我们来介绍一下Extjs中GridPanel的详细用法。

本文的示例代码适用于Extjs 4.x和Extjs 5.x,在Extjs 4.2.1 和Extjs 5.0.1中亲测可用!

本文由齐飞(youring2@gmail.com)原创,并发布在http://www.qeefee.com/article/extjs-grid-in-detail,转载请注明出处!推荐更多Extjs教程、Extjs5教程

创建GridPanel

要使用GridPanel,首先要定义Store,而在创建Store的时候必须要有Model,因此我们首先来定义Model:

//1.定义Model
Ext.define("MyApp.model.User", {extend: "Ext.data.Model",fields: [{ name: 'name', type: 'string' },{ name: 'age', type: 'int' },{ name: 'phone', type: 'string' }]
});

然后创建Store:

//2.创建store
var store = Ext.create("Ext.data.Store", {model: "MyApp.model.User",autoLoad: true,pageSize: 5,proxy: {type: "ajax",url: "GridHandler.ashx",reader: {root: "rows"}}
});

接下来才是GridPanel的代码:

//3.创建grid
var grid = Ext.create("Ext.grid.Panel", {xtype: "grid",store: store,width: 500,height: 200,margin: 30,columnLines: true,renderTo: Ext.getBody(),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: { xtype: "pagingtoolbar", store: store, displayInfo: true }
});

这个GridPanel的效果如下:

在这个GridPanel中,我们可以通过复选框勾选数据行,可以编辑“年龄”和“电话”列,还可以对数据进行客户端排序。

Extjs GridPanel的列

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",

然后,我们可以通过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();

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来实现的。我们之前已经介绍过Extjs Store的各种代理方式,可以参考我之前的文章:

  • Extjs 客户端代理(proxy)
  • Extjs 服务器代理(proxy)

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

//2.创建store
var store = Ext.create("Ext.data.Store", {model: "MyApp.model.User",autoLoad: true,pageSize: 5,proxy: {type: "ajax",url: "GridHandler.ashx",reader: {root: "rows"}}
});

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

{"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
}

Extjs GridPanel分页

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

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

1. Store添加pageSize配置项

var store = Ext.create("Ext.data.Store", {model: "MyApp.model.User",autoLoad: true,pageSize: 5,proxy: {type: "ajax",url: "GridHandler.ashx",reader: {root: "rows"}}
});

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

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

2. GridPanel添加PagingToolbar

bbar: { xtype: "pagingtoolbar", store: store, displayInfo: true }

在完成这两项配置以后,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 finishede.record.commit();
});

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

Extjs GridPanel选中单元格内容

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

代码如下:

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

禁止显示列头部右侧菜单

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

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

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

转载于:https://www.cnblogs.com/youring2/p/3998761.html

Extjs GridPanel用法详解相关推荐

  1. Extjs Window用法详解 3 打印具体应用,是否关掉打印预览的界面

    Extjs Window用法详解 3 打印具体应用,是否关掉打印预览的界面 Extjs 中的按钮元素 { xtype: 'buttongroup', title: '打印', items: [ me. ...

  2. Extjs Form用法详解(适用于Extjs5)

    为什么80%的码农都做不了架构师?>>>    Extjs Form是一个比较常用的控件,主要用来显示和编辑数据的,今天这篇文章将介绍Extjs Form控件的详细用法,包括创建Fo ...

  3. Extjs Window用法详解 2 打印具体应用

    Extjs 中的按钮元素 { xtype: 'buttongroup', title: '打印', items: [ me.tsbDel = Ext.create('Ext.button.Button ...

  4. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...

  5. python argv 详解_Python3 sys.argv[ ]用法详解

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...

  6. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  7. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  8. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  9. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  10. php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy

    Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...

最新文章

  1. js 获取当前时间 随记
  2. python中intvar_在Python线程中使用Intvar/DoubleVar是否安全?
  3. 数据结构--KMP算法总结
  4. DISPLAY环境变量的作用
  5. [POJ 1741] Tree
  6. SSO CAS 探究
  7. 解决-bash: make: command not found安装提示错误
  8. Java Web Token - JWT
  9. ResNet 运行在Cifar10 测试集86.38% Tensorflow 2.1 小白从代码实践中 理解
  10. 虚拟CentOS访问Windows下共享文件(二)
  11. 苹果x来电闪光灯怎么设置_苹果6splus来电没有声音,苹果6sp听筒没有声音怎么回事...
  12. MongoDB笔记(一):MongoDB介绍及Windows下安装
  13. 蓝桥杯第五届JavaC组杨辉三角问题解决方法
  14. 探究CSS中border-top属性的使用
  15. 手动编译安装lanmp centos6.5 64位
  16. Unity开发-CYJ技术文档总结篇
  17. 服务器防火墙开启导致无法远程连接解决方案
  18. Error: Unable to execute “/usr/bin/vmware-uninstall-tools.pl.终极解决方案
  19. Appium 按压元素进行滑动
  20. PCIe学习笔记之pcie结构和配置空间

热门文章

  1. 全网首发:无线网桥的延迟太大,有时达到10秒以上
  2. Http协议简易分析
  3. svn linux clean up,SVN清理失败 (svn cleanup) 的解决方法
  4. selenium安装包_??《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)...
  5. linux下默认分区system的id,Linux学习笔记之系统中的分区和文件系统
  6. java关于排版的说法正确是_Java代码规范--排版,命名---以及一个例子
  7. Linux系统启动需要多长时间,Linux系统启动时间的极限优化是怎样进行的?
  8. a标签传值到另一个页面_用大头儿子和小头爸爸举例,就讲明白 vue 中父子组件的传值? | 原力计划...
  9. java 静态库和动态库_Android下Java的静态库和动态库
  10. chmod和chown命令的用法