无废话ExtJs 入门教程十七[列表:GridPanel]

extjs技术交流,欢迎加群(521711109) 程序员俱乐部-ExtJs(4群)

在Extjs中,GridPanel用于数据显示,即我们平时说的列表页。在本节中,我们先对GridPanel有个基本的认识,后继过程再做Demo练习详细讲解在开发中的应用。

1.代码如下:

复制代码
  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4     <title></title>
  5     <!--ExtJs框架开始-->
  6     <script type="text/javascript" src="/Ext/adapter/ext/ext-base.js"></script>
  7     <script type="text/javascript" src="/Ext/ext-all.js"></script>
  8     <script src="/Ext/src/locale/ext-lang-zh_CN.js" type="text/javascript"></script>
  9     <link rel="stylesheet" type="text/css" href="/Ext/resources/css/ext-all.css" />
 10     <!--ExtJs框架结束-->
 11     <script type="text/javascript">
 12         Ext.onReady(function () {
 13             //数据源
 14             var jsonstore = new Ext.data.JsonStore({
 15                 data: [
 16                     { id: 1, name: '张三', sex: '0', birthday: '2001/01/01' },
 17                     { id: 2, name: '李四', sex: '1', birthday: '2002/01/01' },
 18                     { id: 3, name: '王五', sex: '0', birthday: '2003/01/01' }
 19                 ],
 20                 fields: ['id', 'name', 'sex', { name: 'birthday', type: 'date', dateformat: 'Y/m/d'}]
 21             });
 22             //复选框列
 23             var sm = new Ext.grid.CheckboxSelectionModel();
 24             //渲染性别
 25             var sexrender = function (value, metaData, record, rowIndex, cloIndex, store) {
 26                 if (value == '0') {
 27                     metaData.attr = 'style="font-weight:bold";'
 28                     return '男';
 29                 }
 30                 else
 31                     return '女';
 32             }
 33             //定义列
 34             var column = new Ext.grid.ColumnModel({
 35                 columns: [
 36                       sm,
 37                      { header: '编号', dataIndex: 'id', sortable: true },
 38                      { header: '姓名', dataIndex: 'name' },
 39                      { header: '性别', dataIndex: 'sex', renderer: sexrender },
 40                      { header: '出生日期', dataIndex: 'birthday', renderer: Ext.util.Format.dateRenderer('Y-m-d') }
 41                 ]
 42             });
 43             //添加按钮
 44             var tbtn = new Ext.Toolbar.Button({
 45                 text: '查看选中项',
 46                 listeners: {
 47                     'click': function () {
 48                         var row = grid.getSelectionModel().getSelections();
 49                         for (var i = 0; i < row.length; i++) {
 50                             alert(row[i].get('id'));
 51                         }
 52                     }
 53                 }
 54             });
 55             //分页控件
 56             var pager = new Ext.PagingToolbar({
 57                 pageSize: 2,
 58                 store: jsonstore,
 59                 listeners: {
 60                     "beforechange": function (bbar, params) {
 61                         var grid = bbar.ownerCt;
 62                         var store = grid.getStore();
 63                         var start = params.start;
 64                         var limit = params.limit;
 65                         alert(store.getCount());
 66                         return false;
 67                     }
 68                 }
 69             });
 70             //列表
 71             var grid = new Ext.grid.GridPanel({
 72                 sm: sm,
 73                 title: 'GridPanel',
 74                 height: 200,
 75                 store: jsonstore,
 76                 tbar: [tbtn],
 77                 bbar: pager,
 78                 colModel: column
 79             });
 80             //表单
 81             var form = new Ext.form.FormPanel({
 82                 frame: true,
 83                 fileUpload: true,
 84                 url: '/App_Ashx/Demo/Upload.ashx',
 85                 title: '表单标题',
 86                 style: 'margin:10px',
 87                 items: [grid]
 88             });
 89             //窗体
 90             var win = new Ext.Window({
 91                 title: '窗口',
 92                 width: 476,
 93                 height: 374,
 94                 resizable: true,
 95                 modal: true,
 96                 closable: true,
 97                 maximizable: true,
 98                 minimizable: true,
 99                 buttonAlign: 'center',
100                 items: form
101             });
102             win.show();
103         });
104     </script>
105 </head>
106 <body>
107     <!--
108 说明:
109 (1)var jsonstore = new Ext.data.JsonStore():创建一个新的数据源。
110     data: 数据项,如数据库中的存储一样
111     id   name   sex  brithday
112     1    张三   0    2001-01-01
113     2    李四   1    2002-01-01
114     3    王五   0    2003-01-01
115     fields: 列的定义,指出数据源应该有几列,每列的名称和数据类型等信息,如上所示,说明存在4列,列名分别为:id,name,sex,brithday。
116 (2) var sm = new Ext.grid.CheckboxSelectionModel():创建一个复选框的列。
117     注意 sm 要在两个地方使用,一、要告诉列模型,上例的36行。二、要告诉列表,上例的72行。缺一不可。
118 (3)var column = new Ext.grid.ColumnModel():grid的列,这个是定义gird应该有几列。
119     如上所示:第一列为:sm[复选框],第二列为:{ header: '编号', dataIndex: 'id', sortable: true },header:显示在gird上面的标题,dataIndex:'id'对应数据源的映射关系,意思就是说,表头显示叫"编号",而实际的数据对应的是数据源的id这一列。
120     { header: '性别', dataIndex: 'sex', renderer: sexrender }:renderer渲染列,执行的方法为 sexrender
121      var sexrender = function (value, metaData, record, rowIndex, cloIndex, store) {
122                 if (value == '0'){
123                         metaData.attr = 'style="font-weight:bold";'
124                         return '男';
125                     }
126                 else
127                     return '女';
128      }
129      参数说明:
130      value:当前单元格的值。
131      meetaData:设置元素<div>男</div>的样式表与属性值,如上所示:我加了个加粗显示的样式。这个参数包含两个属性:metaData.css与metaData.attr
132      record:当前Record对象引用。
133      rowIndex:当前单元格行的索引。
134      colIndex:当前单元格列的索引。
135      store:store的引用。
136      我们最常用的就是 value,平时写的时候大多数只传value,例如: var sexrender = function(value){处理方法}
137 (4)var tbtn = new Ext.Toolbar.Button():创建一个工具栏按钮,tbar可以添加多个按钮,处理不同的方法,如"添加","删除","修改"等。
138 (5)var row = grid.getSelectionModel().getSelections():获取选中项的行,row[i].get('id')获取行中的某一列。
139 (6)var grid = new Ext.grid.GridPanel():声明一个新的gird。
140                 sm: sm,//选择列
141                 store: jsonstore,//数据源
142                 tbar: [tbtn],//顶部的按钮
143                 bbar: pager,//底部的分页
144                 colModel: column//列表头与列
145 (7)var pager = new Ext.PagingToolbar():创建一个新的分页控件
146                 pageSize: 2,//页码大小为2
147                 store: jsonstore,分页的数据源
148                 listeners: {//由于没有链接后台数据库动态绑定数据库,这里在,点下一页时‘beforechange’事件做了个 return false
149                     "beforechange": function (bbar, params) {
150                         var grid = bbar.ownerCt;
151                         var store = grid.getStore();
152                         var start = params.start;//起始数据的索引号
153                         var limit = params.limit;//每页的大小
154                         console.log("==下面是打印信息")
155                         console.log(store.getCount());
156                         console.log(start);
157                         console.log(limit);
158                         console.log("==打印结束。")
159                         return false;
160                     }
161                 }
162             });
163 -->
164 </body>
165 </html>
复制代码

2.效果如下:

无废话extjs教程

转载请注明出处:http://www.cnblogs.com/iamlilinfeng

活到老,学到老,练到老...
8
0
(请您对文章做出评价)
« 上一篇: 无废话ExtJs 入门教程十六[页面布局:Layout]
» 下一篇: 无废话ExtJs 入门教程十八[树:TreePanel]
posted on  2012-06-27 14:33  李林峰的园子 阅读( 19301) 评论( 18编辑  收藏

  
#1楼   2012-06-27 15:10 |  貓崽   
你可以看看Ext.define的用法,写起来代码会比你现在这样写好重用
  
#2楼 [ 楼主2012-06-27 15:22 |  李林峰的园子   
@貓崽
恩,谢谢指正,这个我稍有了解,Ext.define是4的写法,和3中的Ext.extend 类似。继承关系会在后面阐述,到时还请多多指点。
  
#3楼   2012-06-27 15:27 |  HU9HJI1   
貌似挺好的.但是有些地方看不懂.
  
#4楼 [ 楼主2012-06-27 15:36 |  李林峰的园子   
@HU9HJI1
你好,做入门教程的意义就是在于让人能看明白,并可以应用,你没看懂的地方可能是我表达的有问题,请具体指出,我好修改下。谢谢。
  
#5楼   2012-06-27 15:50 |  牛腩   
很好的教程 ..嘿嘿..对着这个教程 学完后我应该也能自己录个extjs的视频了..嘿嘿.
  
#6楼   2012-06-27 15:51 |  江宁织造   
你是不是做asp.net开发,我很想知道extjs跟asp.net结合开发怎么结合?
  
#7楼   2012-06-27 16:10 |  貓崽   
@小旭.NET实验室
ASP.NET MVC +extJS+Jquery绝配
  
#8楼 [ 楼主2012-06-27 16:11 |  李林峰的园子   
@小旭.NET实验室
是的,前端展现在已讲的差不多了,马上讲到与后台交互了。另外: http://www.cnblogs.com/iamlilinfeng/archive/2012/06/23/2559532.html
我在这个教程里简单的提到过。其实Extjs与后台交互比较容易理解,前端向后端发送http请求,后台数据以json格式输出,然后解析展现在页面上就行了。
  
#9楼 [ 楼主2012-06-27 16:12 |  李林峰的园子   
@牛腩
谢谢支持,希望也能早看到你的视频,加油。
  
#10楼   2012-06-27 17:12 |  冰封e族   
@貓崽
有了 Extjs 还要毛的jquery,蛋疼。
  
#11楼   2012-06-27 20:18 |  朙朙   
@冰封e族
你实际用到时候就知道了,EXT有些东西没Jquery好用
  
#12楼   2012-06-27 20:25 |  朙朙   
@冰封e族
比如说去获取一个Iframe里面的东西,Jquery很方便,
再比如说需要iframe加载完之后再去运行一个回调函数。你试过吗?
这些都是在实际应用会遇到的一些。
还有你说话很不文明。
  
#13楼   2012-06-28 07:01 |  pulihe   
@朙朙
引用 @冰封e族
比如说去获取一个Iframe里面的东西,Jquery很方便,
再比如说需要iframe加载完之后再去运行一个回调函数。你试过吗?
这些都是在实际应用会遇到的一些。
还有你说话很不文明。

因为jq提供的灵活性更大,但ext提供的是一种整体性的解决方案。
对于大型extjs项目来说,整体性便利还是能省下更多成本的。
  
#14楼   2012-06-28 08:28 |  三生石上   
@小旭.NET实验室
引用 你是不是做asp.net开发,我很想知道extjs跟asp.net结合开发怎么结合?

如果是asp.net webforms,可以考虑服务器控件 ExtAspNet,方便快速开发
  
#15楼   2012-06-28 08:37 |  三生石上   
@pulihe
引用 @朙朙
引用引用@冰封e族
比如说去获取一个Iframe里面的东西,Jquery很方便,
再比如说需要iframe加载完之后再去运行一个回调函数。你试过吗?
这些都是在实际应用会遇到的一些。
还有你说话很不文明。

因为jq提供的灵活性更大,但ext提供的是一种整体性的解决方案。
对于大型extjs项目来说,整体性便利还是能省下更多成本的。

extjs和jquery没啥可比性,关注点不同。拿extjs core和jquery比较还差不多
  
#16楼   2012-06-28 08:52 |  朙朙   
@三生石上
引用 @pulihe
引用引用@朙朙
引用引用@冰封e族
比如说去获取一个Iframe里面的东西,Jquery很方便,
再比如说需要iframe加载完之后再去运行一个回调函数。你试过吗?
这些都是在实际应用会遇到的一些。
还有你说话很不文明。

因为jq提供的灵活性更大,但ext提供的是一种整体性的解决方案。
对于大型extjs项目来说,整体性便利还是能省下更多成本的。
extjs和jquery没啥可比性,关注点不同。拿extjs core和jquery比较还差不多

我这边都是用EXTjs为主,Jquery为辅助来做,再比如说,登录页,这么小的一个页面你再去用EXT做,让用户加载那么大一个EXT all?是不是有点得不偿失
  
#17楼   2012-07-02 17:41 |  Lordbaby   
楼主最后最后给出一个什么样的DEMO
  
#18楼 [ 楼主2012-07-02 19:18 |  李林峰的园子   
@Lordbaby
一个传统的基于Ext.Viewport框架,一个基于仿桌面的,都会实现[增,删,改,查],正在写,快出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值