Flex动态DataGridColumn的渲染方法
有动态的DataGridColumn,需要判断内容数字大于0的,变红色
首先是DataGridItemRenderer,因为是简单的文字变色,DataGridItemRenderer继承自UITextField,只修改文字的样式就可以了
package { import mx.controls.dataGridClasses.DataGridItemRenderer; import mx.controls.dataGridClasses.DataGridListData; public class AlarmStatisticsRenderer extends DataGridItemRenderer { private var bgColor:uint = 0xff0000; public function AlarmStatisticsRenderer() { super(); this.setStyle("fontSize","13"); this.setStyle("fontWeight","bold"); } override public function set data(value:Object):void { super.data = value; if(data) { var df:String = (this.listData as DataGridListData).dataField;//这个就是判断动态dataField的地方了 if(int(data[df]) > 0) { this.setStyle("color",bgColor); } else { this.setStyle("color",0xffffff); } } } } }
使用方法:
创建一个IFactory
/**表格内容渲染器*/ private static var dgRenderer:IFactory = new ClassFactory(AlarmStatisticsRenderer);
在动态生成DataGridColumn的时候,设置itemRenderer
var neColum:DataGridColumn = new DataGridColumn(); neColum.setStyle("textAlign","center"); neColum.dataField = key; neColum.headerText = getCnName(key); neColum.itemRenderer = dgRenderer; colArr.push(neColum);
这样数据中大于0的,就会变成红色
对于更复杂的渲染器,可以通过实现mx.controls.listClasses.IDropInListItemRenderer接口来取到listData
注意实现该接口,需要增加listData的get和set方法,代码如下:
//---------------------------------- // listData //---------------------------------- /** * @private */ private var _listData:DataGridListData; public function get listData():BaseListData { return _listData; } /** * @private */ public function set listData(value:BaseListData):void { _listData = DataGridListData(value); }

浙公网安备 33010602011771号