ExtJS自制表格Grid分页条

试过Grid自带的load和分页功能,没有成功,干脆就自己写了......

主要是查询条件比较复杂......

希望哪位大神能有更好的意见。

  1 Ext.define(‘MyApp.ux.Pagination‘, {
  2     extend: ‘Ext.Toolbar‘,
  3 //    调用时用此名称
  4     alias: ‘Pagination‘,
  5     autoDestroy : true,
  6     items : [‘->‘,{
  7 //        用于记录查询条件
  8         xtype : ‘displayfield‘,
  9         itemId : ‘objInPagination‘,
 10          hidden : true,
 11     },{
 12 //        总页数记录
 13         xtype : ‘numberfield‘,
 14         itemId : ‘totalInPagination‘,
 15         hideTrigger : true,
 16         allowDecimals : false,
 17          allowBlank : false,
 18          hidden : true,
 19          value : 0 ,
 20         listeners : {
 21 //            值改变时修改总页数显示
 22             change : function(newValue, oldValue, eOpts){
 23                 var toolbar = this.up(‘toolbar‘);
 24                 var pageInPagination = toolbar.down(‘#pageInPagination‘);
 25                 var value = this.getRawValue().toString();
 26                 pageInPagination.setMaxValue(parseInt(value));
 27                 var displayfieldInPagination = toolbar.down(‘#displayfieldInPagination‘);
 28                 displayfieldInPagination.setValue(‘/共‘ + value +‘页‘);
 29             }
 30         }
 31     },{
 32 //        每页条数
 33         xtype : ‘numberfield‘,
 34         itemId : ‘limitInPagination‘,
 35         hideTrigger : true,
 36          hidden : true,
 37         allowDecimals : false,
 38          allowBlank : false,
 39          value : 10
 40     },{
 41         text : ‘上一页‘,
 42         handler : function(btn){
 43             var toolbar = btn.up(‘toolbar‘);
 44             var pageInPagination = toolbar.down(‘#pageInPagination‘);
 45             var page = pageInPagination.getValue() - 1;
 46             pageInPagination.setValue(page);
 47             var GoInPagination = toolbar.down(‘#GoInPagination‘);
 48             GoInPagination.handler(GoInPagination);
 49         }
 50     },{
 51 //        当前页数
 52         xtype : ‘numberfield‘,
 53         itemId : ‘pageInPagination‘,
 54         hideTrigger : true,
 55         allowDecimals : false,
 56         minValue : 1,
 57          allowBlank : false,
 58          value : 1 ,
 59          maxValue : 0,
 60         width : 30
 61     },{
 62 //        总页数显示
 63         xtype : ‘displayfield‘,
 64         itemId : ‘displayfieldInPagination‘,
 65         value : ‘/共0页‘,
 66     },{
 67         text : ‘下一页‘,
 68         handler : function(btn){
 69             var toolbar = btn.up(‘toolbar‘);
 70             var pageInPagination = toolbar.down(‘#pageInPagination‘);
 71             var page = pageInPagination.getValue() + 1;
 72             pageInPagination.setValue(page);
 73             var GoInPagination = toolbar.down(‘#GoInPagination‘);
 74             GoInPagination.handler(GoInPagination);
 75         }
 76     },{
 77         text : ‘Go‘,
 78         itemId : ‘GoInPagination‘,
 79         handler : function(btn){
 80             var toolbar = btn.up(‘toolbar‘);
 81             var pageInPagination = toolbar.down(‘#pageInPagination‘);
 82             var Grid = btn.up(‘grid‘);
 83             if(pageInPagination.isValid()){
 84                 var objHttpParams = toolbar.down(‘#objInPagination‘).getValue();
 85                 var obj = {};
 86                 obj.limit = toolbar.down(‘#limitInPagination‘).getValue();
 87                 obj.page = toolbar.down(‘#pageInPagination‘).getValue();
 88                 var tools = Ext.create(‘MyApp.Tools‘);
 89                 var httpParams = tools.objectToHttpOgnlParams(obj,null,3) + ‘&‘ + objHttpParams;
 90                 Grid.search(httpParams);
 91             }else{
 92 //                页码不正确时清空表格内容,当前页数为0
 93                 Grid.getStore().removeAll();
 94                 pageInPagination.setValue(0);
 95             }
 96         }
 97     }],
 98     doSearch : function(limit,total,obj){
 99         this.down(‘#limitInPagination‘).setValue(limit);
100         this.down(‘#totalInPagination‘).setValue(total);
101         this.down(‘#pageInPagination‘).setValue(1);
102         var tools = Ext.create(‘MyApp.Tools‘);
103         var objHttpParams = tools.objectToHttpOgnlParams(obj,null,3);
104         this.down(‘#objInPagination‘).setValue(objHttpParams);
105         var GoInPagination = this.down(‘#GoInPagination‘);
106         GoInPagination.handler(GoInPagination)
107     }
108   });

表格中的调用

 1 /**
 2  *
 3  */
 4 Ext.define(‘MyApp.view.dict.operator.OperatorGrid‘, {
 5     extend : ‘Ext.grid.Panel‘,
 6     requires : [‘MyApp.store.Operator‘],
 7     xtype : ‘OperatorGrid‘,
 8     store : Ext.create(‘MyApp.store.Operator‘),
 9 //    分页条,bbar是在底部,tbar是在顶端
10     bbar : Ext.create(‘MyApp.ux.Pagination‘),
11     columns : [{
12         text : ‘账号‘,
13         dataIndex : ‘user‘,
14         width : ‘14%‘
15     },{
16         text : ‘姓名‘,
17         dataIndex : ‘name‘,
18         width : ‘14%‘
19     }, {
20         text : ‘部门‘,
21         dataIndex : ‘department‘,
22         width : ‘14%‘,
23         renderer : function(department) {
24             return department.name;
25         }
26     },{
27         text : ‘手机‘,
28         dataIndex : ‘mobile‘,
29         width : ‘14%‘
30     }, {
31         text : ‘座机‘,
32         dataIndex : ‘telphoneSet‘,
33         width : ‘14%‘
34     }, {
35         text : ‘邮箱‘,
36         dataIndex : ‘email‘,
37         width : ‘14%‘
38     } , {
39         text : ‘备注‘,
40         dataIndex : ‘remark‘,
41         width : ‘16%‘
42     } ],
43     title : ‘人员列表‘,
44     search : function(httpParams){
45 //        与action交互,执行查询,httpParams是已定义好转码好的查询条件
46         var operatorSearchForm = Ext.ComponentQuery.query(‘#OperatorSearchForm‘)[0];
47         operatorSearchForm.submit({
48         url : ‘operatorSearchWithPage.action‘,
49         params : httpParams,
50         method : ‘post‘,
51         waitMsg:‘稍安勿躁...‘,
52         success : function(basicForm, action) {
53 //        执行查询成功后的操作
54             var operatorGrid = Ext.ComponentQuery.query(‘#OperatorGridInSearchForm‘)[0];
55             if (operatorGrid) {
56                 operatorGrid.setStore(Ext.create(‘MyApp.store.Operator‘, {
57                             data : action.result.operators
58                         }));
59             }
60         },
61         failure : function() {
62             Ext.Msg.alert(‘悲剧‘, ‘查询操作失败,请重试‘);
63         }
64     });
65     }
66 });

查询按钮被点击时

 1     onClickSearchButton : function(btn) {//点击“查询”按钮执行
 2 //        获取查询条件
 3         var operatorSearchForm = btn.up(‘form‘);
 4         var obj = operatorSearchForm.getViewModel().getData();
 5 //查询条件obj转码
 6         var tools = Ext.create(‘MyApp.Tools‘);
 7         var httpParams = tools.objectToHttpOgnlParams(obj,null,3);
 8         operatorSearchForm.submit({//获取查询结果总条数
 9             url : ‘operatorCount.action‘,
10             params : httpParams,
11             method : ‘post‘,
12             waitMsg:‘稍安勿躁...‘,
13             success : function(basicForm, action) {
14 //每页条数
15                 var limit = 10;
16 //总页数(查询总记录数除以每页条数,向上取整)
17                 var total = Math.ceil(action.result.total/limit);
18 //                找到对应显示的表格
19                 var OperatorGridInSearchForm = Ext.ComponentQuery.query(‘#OperatorGridInSearchForm‘)[0];
20 //找到表格下的分页条
21                 var toolbar = OperatorGridInSearchForm.down(‘toolbar‘);
22 //执行查询
23                 toolbar.doSearch(limit,total,obj);
24             },
25             failure : function() {
26                 Ext.Msg.alert(‘悲剧‘, ‘查询操作失败,请重试‘);
27             }
28         });
29     },

最终效果

时间: 2024-11-08 21:28:53

ExtJS自制表格Grid分页条的相关文章

ExtJs之表格控件入门

extjs的表格功能非常强大,包括了排序,缓存,拖动,隐藏某一列,自动显示行号,列汇总,单元格编辑等实用功能.表格由类Ext.grid.GridPanel定义,继承自Panel,其xtype为grid.Extjs中表格Grid必须包含列定义信息,并指定表格的数据存储器Store.表格的列信息由类Ext.grid.ColumnModel定义,而表格的数据存储器则是由Ext.data.Store定义,数据存储器根据解析数据的不同分为JsonStore,simleStore,GroupingStore

【ExtJs】表格控件Grid的增删改查,利用renderer让操作列actioncolumn使用文字而不是图标

在<[ExtJs]与后台数据库交互的带分页表格组件grid的查询>(点击打开链接)中介绍了Grid控件是怎么分页显示的.再加上对此控件内的数据的增加.删除.修改,就真的是大功告成了.此控件的排序,应该在后台的数据库查询语句中增加一条order by语句即可,前台的排序在分页之后,仅能对当前页进行排序,没有什么意义.下面举一个例子来说明,如果对ExtJs的表格控件Grid进行增删改查 一.基本目标 还是在数据库中有一张user表: 然后在网页中,如下图所示,通过增加.编辑.删除按钮能为这个表格控

ExtJs中grid分页加载的问题

最近项目中遇到一个grid分页加载的问题,当按照条件查询数据后,数据数据在grid中分页显示,当点击翻页后grid的中显示第二页数据.此时更换查询条件后再次点击查询时,发现grid的下面分页信息栏中页码并不是1,而是上次翻到的页面. 这是因为以前在点击查询时调用的是store.load()方法,然后再load之前将参数添加进去. 如果想让每次查询时页面从1开始就要使用store的loadPage方法.使用该方法指定每次加载的页码是1 例如 record_store.loadPage(1,{ pa

ExtJS远程数据-本地分页

背景 一般情况下,分页展示是前端只负责展示,后台通过SQL语句实现分页查询.当总数据量在千条以下,适合一次性查询出符合条件的所有数据,让前端页面负责分页也是一种选择. 实例 现通过ExtJS 4扩展类库Ext.ux.data.PagingStore来实现分页,建议使用前在GitHub获取最新版本. 使用时非常简单,只需将Store的继承类改为“Ext.ux.data.PagingStore”,其他分页配置可参照之前的文章<ExtJS实现分页grid paging>. Ext.define('X

ext:grid分页,列宽度自动填满grid宽度

var cm = new Ext.grid.ColumnModel([{      header : '编号',      dataIndex : 'id'     }, {      header : '名称',      dataIndex : 'name'     }, {      header : '描述',      dataIndex : 'descn'     }]);   var store = new Ext.data.Store({      proxy : new Ext

dojo grid 分页

dojo很强大,也很方便,但是缺少文档,只能看源代码,也挺好的,就是费时间... 网上找了一段代码(找不到原出处了,不好意思),也看了dojo自带的demo,放一段可以执行的页面代码这里.把ip换成自己架设的js服务器(esi的CDN貌似有点问题)即可 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; ch

ExtJS4.2实例:表格Grid嵌套(内部Grid)-MVC模式

前文ExtJS4.2 Grid嵌套实例中讲解了如何在表格Grid中嵌套Grid,即外部Grid中每行分别展现为不同的内部Grid,比如常见的费用报销业务,费用类别有往返车费和住宿费,其中往返车费需要填写往返类型.交通工具.费用日期.出发地.目的地和金额,住宿费只需填写入住日期.离开日期.单价和金额,在一个表格中包含多种费用类别,每个费用类别下又有多条明细,所需实现的业务场景图片如: 在线演示  /  示例代码 由于前文未采用MVC模式来组织代码,代码可读性不强,本文将在前文基础上按照MVC模式来

ExtJS4.2 Grid知识点三:改变表格Grid单元格背景颜色

在ExtJS4.2 Grid知识点一:改变表格Grid单元格文字颜色一文中讲解了如何改变单元格中文字颜色,接下来在本章学习如何改变Grid中单元格的背景颜色,显示结果如图片: 在线演示  /  示例代码 实现方式同样是为Grid中该列自定义renderer函数,查询ExtJS 4.2 API得知,Ext.grid.column.Column的renderer属性可以是一个函数也可以是字符串,这个知识点是通过函数来实现的.函数参数列表如下: value : 当前待渲染的单元格值,即表格中某行某列的

ExtJS 4.2 Grid组件的单元格合并

ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid组件,然后查看下的HTML源码. 1.1.1 Grid组件 1.1.2 HTML代码 从这些代码中可以看出,Grid组件可分为grid-header和grid-body 两块区域(若含有工具栏和分页栏,它们都会含有各自的独立区域). 其中grid-body包含了许多tr元素,每一个tr都是代表Gri