群里一哥们问了个问题,就写了个这个demo
DataGrid 行列背景颜色设置
效果图:
相关代码:
原理重写DataGrid drawRowBackground 方法。
<?xml version="1.0" encoding="utf-8"?> <mx:DataGrid xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.containers.Form; import mx.controls.Alert; import mx.controls.dataGridClasses.DataGridColumn; override protected function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number, color:uint, dataIndex:int):void { var list:XMLList = new XMLList(dataProvider); if(rowIndex<list.length()) { var item:XML=list[rowIndex]; super.drawRowBackground(s,rowIndex,y,20,item.child("color"),dataIndex); } } override protected function drawColumnBackground(s:Sprite, columnIndex:int, color:uint, column:DataGridColumn):void { var columnShape:Shape = Shape(s.getChildByName("lines"+columnIndex.toString())); if( columnShape == null ) { columnShape = new Shape(); columnShape.name = "lines"+columnIndex; s.addChild(columnShape); } super.drawColumnBackground(s,columnIndex,color,column); } ]]> </fx:Script> </mx:DataGrid>