flex表格综合应用(可编辑单元格,自定义函数,行间颜色变化,多列头)
来源:互联网 发布:丝洛芬淘宝有得卖 编辑:程序博客网 时间:2024/05/20 02:26
案例背景:此案例以 学生成绩单为背景
需求:
1.如果总分大于等于270分,表格行,背景色自动填充为 ,绿色
2.表格,单元格是可编辑的
3.总分自动根据编辑完成数据,计算出新的总分
4.编辑单元格数据,只能填入数字,错误数据格式,要予以提示
5.合并单元格(如学科下有,语文,数学,英语等,见图)
6.格式化输入的正确数据(如3就格式化成3.00)
7.根据集合数据,自动生成序列号
效果图:
项目目录:
demo:
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:components="components.*"> <mx:Script> <![CDATA[ import mx.olap.aggregators.MinAggregator; import mx.events.ValidationResultEvent; import mx.validators.NumberValidator; import mx.events.AdvancedDataGridEvent; import mx.controls.TextInput; import mx.events.DataGridEvent; import mx.validators.StringValidator; import mx.collections.ArrayCollection; import mx.formatters.NumberFormatter; import mx.controls.DataGrid; /** * 生成序号 */private function formatIndexNumber(item:Object, colum:Object):String{ var dataGrid:Object = colum.mx_internal::owner; var datas:Array = dataGrid.dataProvider.source; var indexNum:int = (datas.indexOf(item) + 1); return indexNum.toString();}/** * 格式化数字数据 */ private function foramtNumberField(item:Object, column:Object):String { var numberFormatter:NumberFormatter = new NumberFormatter(); var value:Number = item[column.dataField]; numberFormatter.precision = "2"; numberFormatter.thousandsSeparatorTo = ","; return numberFormatter.format(value); } [Bindable]public var sourceData:ArrayCollection = new ArrayCollection([ {userName:'张三',chineseScore:'90',mathScore:'95',englishScore:'97',totalScore:'282'} ,{userName:'李四',chineseScore:'90',mathScore:'99',englishScore:'67',totalScore:'256'} ,{userName:'王五',chineseScore:'40',mathScore:'65',englishScore:'97',totalScore:'202'} ,{userName:'赵六',chineseScore:'90',mathScore:'95',englishScore:'97',totalScore:'282'} ,{userName:'刘七',chineseScore:'30',mathScore:'85',englishScore:'77',totalScore:'192'} ,{userName:'严八',chineseScore:'90',mathScore:'95',englishScore:'98',totalScore:'283'} ,{userName:'孙九',chineseScore:'70',mathScore:'94',englishScore:'97',totalScore:'261'}]);;/**start:校验数据是否合法**/public var nv:NumberValidator;private function onEditEnd(event:AdvancedDataGridEvent):void{var dataField:String = event.dataField;var fCell:Array=[event.columnIndex,event.rowIndex];var textInput:TextInput = TextInput(event.currentTarget.itemEditorInstance);var newData:String = textInput.text;nv = new NumberValidator();if(dataField == 'chineseScore' || dataField == 'mathScore' || dataField == 'englishScore'){nv.source = event.currentTarget.itemEditorInstance;nv.property = "text";nv.required=true;nv.requiredFieldError = "内容不能为空字符串,请重新输入数据!";nv.invalidCharError = "必须为数字,请重新输入数据";nv.allowNegative=false; //允许为负数设置nv.negativeError="内容不能为负数,请重新输入数据"nv.precision=2;nv.precisionError="小数点后只能有两位有效数字!"nv.decimalPointCountError="分隔符或数字小数的错误!";nv.thousandsSeparator=",";var val:ValidationResultEvent = nv.validate();if(val.type == ValidationResultEvent.INVALID){callLater(maintainEdit,fCell); } else { callLater(maintainFocus);}}else{callLater(maintainFocus);}}private function maintainFocus():void{ dg.editedItemPosition = null;}private function maintainEdit(colIndex:int,rowIndex:int):void{var editCell:Object = {columnIndex:colIndex, rowIndex: rowIndex};if(dg.editedItemPosition==null){ dg.editedItemPosition = editCell;callLater(validateCurrentEditor); } }private function validateCurrentEditor():void{if(dg.itemEditorInstance!=null){ nv.source = dg.itemEditorInstance; nv.validate(); }}/**end:校验数据是否合法**/ ]]> </mx:Script> <mx:Style>Application{backgroundColor: #FFFFFF;backgroundDisabledColor: #FFFFFF;backgroundSize: "100%";fontSize: 12;} AdvancedDataGrid{ headerColors: #cad5db, #edf3f7; rollOverColor: #faf1d2; borderColor: #ffffff; selectionColor: #fbcfae;} .errorTip { fontSize: 11; } </mx:Style> <mx:VBox height="100%" width="100%"> <components:RowColorDataGrid id="dg" width="100%" height="100%" editable="true" dataProvider="{sourceData}" sortableColumns="false" sortExpertMode="true" itemEditEnd="onEditEnd(event)"> <components:groupedColumns> <mx:AdvancedDataGridColumnGroup headerText="2013年上学期,高三(3)班,期末成绩单"> <mx:AdvancedDataGridColumn labelFunction="formatIndexNumber" headerText="序号" width="40" editable="false" /> <mx:AdvancedDataGridColumn headerText="姓名" dataField="userName" width="80" editable="false"/> <mx:AdvancedDataGridColumnGroup headerText="学科"> <mx:AdvancedDataGridColumn headerText="语文" dataField="chineseScore" width="60" editable="true"> <mx:itemRenderer> <mx:Component> <mx:Label> <mx:Script> <![CDATA[ import mx.formatters.NumberFormatter; override public function set data(value:Object ) : void { super.data = value; var numberFormatter:NumberFormatter = new NumberFormatter(); numberFormatter.precision = "2"; numberFormatter.thousandsSeparatorTo = ","; this.htmlText = numberFormatter.format(value.chineseScore); value.totalScore = Number(value.chineseScore)+ Number(value.mathScore) + Number(value.englishScore); } ]]> </mx:Script> </mx:Label> </mx:Component> </mx:itemRenderer> </mx:AdvancedDataGridColumn > <mx:AdvancedDataGridColumn headerText="数学" dataField="mathScore" width="100" editable="true" labelFunction="foramtNumberField"/> <mx:AdvancedDataGridColumn headerText="英语" dataField="englishScore" width="80" editable="true" labelFunction="foramtNumberField"/> </mx:AdvancedDataGridColumnGroup> <mx:AdvancedDataGridColumn headerText="总分" dataField="totalScore" width="60" editable="false" labelFunction="foramtNumberField"/> </mx:AdvancedDataGridColumnGroup> </components:groupedColumns> </components:RowColorDataGrid> </mx:VBox></mx:Application>
RowColorDataGrid.as
package components{import flash.display.Sprite;import mx.controls.AdvancedDataGrid; public class RowColorDataGrid extends AdvancedDataGrid{//用于设置颜色,参数: 当前item, rowIndex, dataIndex, 当前colorpublic var rowColorFunction:Function;//覆写drawRowBackground,目的是根据rowColorFunction返回颜色设置当前行override protected function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number,color:uint, dataIndex:int):void{//从dataProvider中获取当前itemvar item:Object;if(dataProvider != null && dataIndex < dataProvider.length){item = dataProvider[dataIndex];}if(item!= null){ //如果当前item存在,从rowColorFunction中获取行的颜色if(item.totalScore >= 270.00){color = 0x92d564; }}//调用父类方法设置当前行颜色super.drawRowBackground(s, rowIndex, y, height, color, dataIndex);}}}
- flex表格综合应用(可编辑单元格,自定义函数,行间颜色变化,多列头)
- 表格:自定义单元格;替换、颜色
- 可编辑表格、获取单元格坐标
- SWT的Table表格可编辑单元格
- flex控制datagrid单元格可编辑
- Swing表格自定义JTable (表格可编辑)
- element-ui 表格实现单元格可编辑的方法
- Demo-表格行间隔颜色
- 单元格排序+行颜色变化(DHTML)
- 创建动态DEEP STRUCTURE实现控制单元格可编辑,单元格颜色,行颜色
- 自定义单元格格式中颜色的应用
- 可编辑单元格ALV
- easyui 可编辑单元格
- easyui 自定义扩展方法 单元格编辑 判断是否可编辑 滚动到某列单元格
- 在JTable单元格上 加入组件,并赋予可编辑能力 [转] 表格(单元格放置组件)
- 表格颜色隔行变化
- MFC--CListCtrl的两个扩展:可设置单元格(子项)颜色属性、可编辑单元格(子项)
- easyui 单元格编辑,下拉表格。。。。
- 【晋级修炼:每个程序员都应读的30本书】
- ZOJ 1049
- ExecutorService线程池
- seo :切忌自觉寻求原创
- dwz dialog post 后 跳转或刷新 dialog
- flex表格综合应用(可编辑单元格,自定义函数,行间颜色变化,多列头)
- 中国软件工程师之痛
- 【Unsupported major.minor version 51.0】问题处理
- java web
- skew-symmetric matrix
- 4个因素可能导致优化过度
- ORM for Net主流框架汇总与效率测试
- iocp
- PHP里不需要中间变量的变量值互换