首页 > 代码库 > 深入浅出ExtJS 第三章 表格控件(未完)
深入浅出ExtJS 第三章 表格控件(未完)
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 =http://www.mamicode.com/ [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 = http://www.mamicode.com/[[‘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 =http://www.mamicode.com/= ‘male‘){ 5 return "<span style=‘color:red; font-weight:bold‘>红男</span><img src="http://www.mamicode.com/user_male.png" />"; 6 }else{ 7 return "<span style=‘color:green, font-weight:bold‘>绿女</span><img src="http://www.mamicode.com/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 = http://www.mamicode.com/[[‘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 })
深入浅出ExtJS 第三章 表格控件(未完)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。