很多时候会用到动态改变datagrid的headerRender 或者itemRender的属性值,也会有设置单元格的颜色的要求。
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:render="com.render.*"> <fx:Declarations> <fx:XMLList id="employees"> <employee> <name>Christina Coenraets</name> <phone>555-219-2270</phone> <email>ccoenraets@fictitious.com</email> <active>true</active> <credit>101</credit> </employee> <employee> <name>Joanne Wall</name> <phone>555-219-2012</phone> <email>jwall@fictitious.com</email> <active>true</active> <credit>80</credit> </employee> <employee> <name>Maurice Smith</name> <phone>555-219-2012</phone> <email>maurice@fictitious.com</email> <active>false</active> <credit>-110</credit> </employee> <employee> <name>Mary Jones</name> <phone>555-219-2000</phone> <email>mjones@fictitious.com</email> <active>true</active> <credit>0</credit> </employee> </fx:XMLList> </fx:Declarations> <fx:Script> <![CDATA[ public var testBaseValue:int; protected function outterHandler(event:MouseEvent):void { //内部的render可以直接改变外面的值来改变属性 testBaseValue = 1; dg.dataProvider.refresh(); } protected function innerAndOutterHandler(event:MouseEvent):void { (header1.headerRenderer as ClassFactory).properties = {‘baseValue‘:1};// 不管内部还是外部的render都可以通过此方法动态赋值 header1.headerRenderer = header1.headerRenderer; dg.dataProvider.refresh(); } ]]> </fx:Script> <s:layout> <s:VerticalLayout/> </s:layout> <s:Button label="Inner Outter Change properties" click="innerAndOutterHandler(event)"/> <s:Button label="Outter Change properties" click="outterHandler(event)"/> <mx:DataGrid id="dg" width="100%" height="100%" rowCount="5" dataProvider="{employees}"> <mx:columns> <mx:DataGridColumn dataField="name" headerText="Name" id="header1" headerRenderer="com.render.CustomHeadRender"/> <mx:DataGridColumn dataField="phone"> <mx:headerRenderer> <!--这个是内部render--> <fx:Component> <render:CustomHeadRender> <fx:Script> <![CDATA[ override public function validateProperties():void { super.validateProperties(); //用outerDocument来访问外部的属性和方法 if(outerDocument.testBaseValue == 1) { this.text = "CustomHeader2"; } else { this.text = "DefaultHeader2"; } } ]]> </fx:Script> </render:CustomHeadRender> </fx:Component> </mx:headerRenderer> </mx:DataGridColumn> <mx:DataGridColumn dataField="credit" headerText="Credit" itemRenderer="com.render.CustomItemRender"/> </mx:columns> </mx:DataGrid> </s:Application>
?CustomHeadRender.as
package com.render { import mx.controls.dataGridClasses.DataGridItemRenderer; /*这个是外部render*/ public class CustomHeadRender extends DataGridItemRenderer { private var _baseValue:int; public function set baseValue(value:int):void { _baseValue = value; } public function get baseValue():int { return this._baseValue; } override public function validateProperties():void { super.validateProperties(); if(baseValue == 1) { this.text = "CustomHeader1"; } else { this.text = "DefaultHeader1"; } } } }
?CustomItemRender.mxml
<?xml version="1.0" encoding="utf-8"?> <s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" focusEnabled="true" autoDrawBackground="{autoDrawBackGroup}" alternatingItemColors="{color}"> <fx:Script> <![CDATA[ // 更改单元格背景色和字体颜色 import mx.controls.listClasses.BaseListData; [Bindable]private var color:uint; [Bindable]private var autoDrawBackGroup:Boolean; override public function set listData(value:BaseListData):void { super.listData = value; if(!isNaN(Number(listData.label))) { if(Number(listData.label) > 100) { color = 0xff0000; } else if(Number(listData.label) > 0) { color = 0x00ff00; } else { color = 0xffffff; } autoDrawBackGroup = color != 0xffffff; } } ]]> </fx:Script> <s:Label id="lblData" top="0" left="0" right="0" bottom="0" text="{dataGridListData.label}" color="{0xffffff - color}"/> </s:MXDataGridItemRenderer>
?
Flex DataGrid 动态改变headerRender 属性&itemRender 改变单元格颜色
原文:http://luhantu.iteye.com/blog/2159731