1 3.1 表格的特性简介2 >.Ext中的表格功能:包括排序/缓存/拖动/隐藏某一列/自动显示行号/列汇总/单元格编辑等实用功能;3 >.表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,其xtype为grid;4 >.表格控件必须包含列(columns)定义信息,并指定表格的数据存储器(Ext.data.Store);
1 3.2 制作一个简单的表格 2 >1.列的定义是一个JSON数组,它是整个表格的列模型,应该首先创建; 3 var columns = [ 4 {header:'编号',dataIndex:'id'}, 5 //每一行数据元素描述表格的一列信息; 包含首部显示文本(header),列对应的记录集字段(dataIndex); 6 {header:'名称',dataIndex:'name'}, 7 {header:'描述',dataIndex:'descn'} 8 ]; 9 10 >2.定义表格中要显示的数据;11 var data = [12 ['1','name1','descn1'],13 ['2','name2','descn2'],14 ['3','name3','descn3']15 ]16 17 >3.创建一个数据存储对象;表格必须配置的属性;负责把各种各样的原始数据(如二维数组,JSON,xml等)转换成Ext.data.Record类型的对象;18 var store = new Ext.data.ArrayStore({19 data:data,20 fields:[21 //这里定义的3个名称与columns的dataIndex相对应;将data数据与columns列模型链接;22 {name:'id'},23 //{name:'id',mapping:1}, //可以设置mapping来设置列的排序;24 {name:'name'},25 {name:'descn'}26 ]27 });28 store.load(); //初始化数据;29 //store对应两个部分:PRoxy(指获取数据的方式)和render(指如何解析这一堆数据);30 31 >4.创建表格32 var grid = new Ext.grid.GridPanel({33 autoHeight:true,34 renderTo:'grid', //指示Ext将表格渲染到什么地方;35 store:store,36 columns:columns37 })
1 3.3 表格常用功能 2 3.3.1 部分属性功能 3 >1.enableColumnMove 拖放移动列; 4 >2.enableColumnResize 改变列宽; 5 >3.stripeRows 斑马线效果; 6 >4.loadMask 显示"Loading..." 7 8 3.3.2 自主决定每列的宽度 9 //每列默认是100px;10 >1.自定义列宽11 var columns = [12 {header:'编号',dataIndex:'id',width:200}13 ]14 >2.forceFit15 var grid = new Ext.grid.GiidPanel({16 renderTo:'grid',17 forceFit:true //让每列自适应填满表格;18 });19 20 3.3.3 sortable表格列排序21 var columns = new Ext.grid.ColumnModel([22 {header:'编号',dataIndex:'id',sortable:true}23 ])24 //Ascending:正序; Descending:倒序;25 26 3.3.4 中文排序27 28 3.3.5 显示日期类型数据29 //Ext可以从后台取得日期类型的数据,交给表格进行格式化;30 var columns = [{header:'日期',dataIndex:'date',renderer:Ext.util.Format.dateRenderer('Y-m-d')}];31 //renderer的属性值就是Ext提供的日期格式化方法;32 var data = [['1','name1','descn1','1970-01-15T02:58:04']]33 var store = new Ext.data.ArrayStore({34 data:data,35 fields:[{name:'date',type:'date',dateFormat:'Y-m-dTH:i:s'}]36 //type属性告诉ExtJS解析数据时按日期类型处理;37 //dateFormat:将数据中的字符串格式转换成日期格式;38 });
1 3.4 表格渲染 2 >1.修改文字颜色样式和添加图片; 3 function renderSex(value){ 4 if(value == 'male'){ 5 return "<span style='color:red; font-weight:bold'>红男</span><img src="user_male.png" />"; 6 }else{ 7 return "<span style='color:green, font-weight:bold'>绿女</span><img src="user_female.png" />"; 8 }; 9 //在返回value之前,拼装上相应的HTML和CSS即可;10 };11 var columns = [{header:'性别',dataIndex:'sex',renderer:renderSex}];12 //renderer的值是一个自定义函数;13 >2.其他可用参数14 function renderDescn(value, cellmeta, record, rowIndex, columnIndex, store){15 var str = value+cellmeta+record+rowIndex+columnIndex+store;16 return str;17 }18 //value:将要显示到单元格的值;19 //cellmeta:单元格的属性,主要有id和CSS;20 //record:所在行的数据对象;21 //rowIndex:所在行行号;22 //columnIndex:所在列列号;23 //store:构造表格传递的ds;
1 3.5 给表格的行和列设置颜色 2 <style>.yellow-row{ background-color: #FBF8BF !important; }</style> 3 Ext.onReady(function(){ 4 5 var data = [['boy',0,'#fbf8bf']]; //表格数据; 6 7 var store = new Ext.data.ArraySotre({ //数据存储对象; 8 data:data, //引入表格数据; 并将数据转换成Ext.data.Record类型的对象; 9 fields:[ //与columns参数对应; 10 {name:'name',type:'string'}, 11 {name:'sex',type:'int'},12 {name:'color',type:'string'}13 ]14 });15 store.load(); //初始化数据;16 17 var grid = new Ext.grid.GridPanel({18 store:store, //引入record数据对象;19 columns:[ //创建列模型;20 {header:'name',dataIndex:'name'},21 {header:'sex',dataIndex:'sex'}22 ],23 renderTo:'grid',24 viewConfig:{25 enableRowBody:true,26 getRowClass:function(record,rowIndex,p,ds){27 var cls = 'white-row'; //默认是白色;28 switch(record.data.color){ //先查找record对象即store,再查找data属性,再查找到color在data里对应的值;29 case '#fbf8bf': //匹配值,设置class名;30 cls = "yellow-row"31 break;32 }33 return cls;34 }35 }36 });37 });
1 3.6 自动显示行号和复选框 2 3.6.1 自动显示行号 3 var columns = [ 4 new Ext.grid.RowNmuberer(), 5 //在列模型中加入RowNumberer对象, 6 {header:'姓名',dataIndex:'name'} 7 ] 8 >.删除行/刷新表格 9 Ext.get('remove').on('click',function(){10 store.remove(store.getAt(0)); //删除第一条数据;11 grid.view.refresh(); //刷新视图重新加载store,并重新渲染模板的数据;12 })13 14 3.6.2 复选框15 var sm = new Ext.selection.CheckboxModel({checkOnly:true});16 //CheckboxModel会在每行数据前添加一个复选框;17 //checkOnly属性表示是否可以通过选中行进行选取,还是必须选中复选框选取;18 var grid = new Ext.grid.GridPanel({19 ...,20 selModel:sm21 //selModel在总体上控制用户对表格的选择功能;22 })
1 3.7 选择模型 2 >1.RowModel(行选择模型) 3 //在定义Ext.grid.GridPanel时,默认使用RowModel--行选择模型; 4 var grid = new Ext.grid.GridPanel({ 5 ..., 6 sm:new Ext.grid.RowModel({singleSelect:true}) //设置只能选中一行; 7 }) 8 >2.CellModel(单元格选择模型) 9 //在EditorGrid里默认使用CellModel;10 >3.选中行信息显示11 grid.on('itemclick',function(){12 //表格绑定单机事件;13 var selected = grid.getSelectionModel().selected; //gSM():返回正在使用的选择模型 selected:所有当前已选择的记录的混合集合14 for(var i=0; i<selected.getCount(); i++){15 var record = selected.get(i);16 Ext.Msg.alert('提示',record.get("id")+","+record.get("name")+","+record.get("descn"));17 }18 })
1 3.8 表格视图--Ext.grid.GridView 2 //表格控件都遵循MVC模型 3 //Ext.data.Store:可看做模型(Model); 4 //Ext.grid.GridPanel:设置的各种监听器可看做控制器(Controller); 5 //Ext.grid.GridView:对应的就是视图(View); 6 //通常情况下不需要自行创建Ext.grid.GridView的实例,Ext.grid.GridPanel会自动生成对应的实例,使用默认的样式将表格显示到页面上; 7 //若希望操作Ext.grid.GridView的属性时,可以通过Ext.grid.GridPanel的getView()函数来获取当前表格使用的视图实例; 8 //与GridView相关的操作都集中在视图的显示功能部分;grid.getView()必须在创建Ext.grid.GridPanel之后调用,它只能获得Ext.grid.GridPanel中创建好的GridView实例; 9 //可以使用Ext.grid.GridPanel的viewConfig参数,在创建GridView时设置一些初始参数;10 var grid = new Ext.grid.GridPanel({ //控制器Controller;11 store:new Ext.data.ArrayStore({ //模型Model;12 data:data,13 fields:meta,14 autoLoad:true15 }),16 columns:meta,17 renderTo:'grid', //GridPanel自动创建对应的实例,即视图View;18 width:450,19 height:80,20 viewConfig:{ //为创建的GridView设置初始参数;21 columnsText:'显示的列', //中文显示;22 scrollOffset:30, //滚动条的宽度,默认是20px;23 sortAscText:'升序',24 sortDescText:'降序',25 forceFit:true //自适应列宽;26 }27 });
1 3.9 表格分页 2 3.9.1 为表格添加分页工具条 3 var grid = new Ext.grid.GridPanel({ 4 renderTo:'grid', 5 autoHeight:true, 6 store:store, 7 columns:columns, 8 bbar:new Ext.PagingToolvar({ 9 pageSize:10, //每页显示几条数据;10 store:store,11 displayInfo:true, //是否显示数据信息;12 displayMsg:'显示第{0}条到{1}条记录,一共{2}条',13 //用来显示有数据时的提示信息;14 emptyMsg:'没有记录' //没有记录时显示的信息;15 })16 });17 store.load(); //必须在构造表格以后执行,否则分页工具条将不起作用;18 //将分页工具条和store相关联,从而实现与表格共享数据模型;19 20 3.9.2 通过后台脚本获得分页数据21 var columns = [{header:'编号',dataIndex:'id'}]22 23 var store = new Ext.data.Store({24 //Store:仓库/存储;它封装了一个客户端缓存,用于存储Model对象;Store通过一个代理Proxy来加载数据,并提供函数来排序/过滤以及查询内部所包含的model实例;25 //而Ext.data.ArrayStore是一个小巧的帮助类,更方便的从一个数组的数据来创建Ext.data.Store;26 proxy:{ //换掉proxy,不再到内存中查找,而是通过HTTP获得想要的数据;27 type:'Ajax', //表示使用Ajax向后台请求数据;28 url:'xxx.jsp', //请求地址;29 r
新闻热点
疑难解答