В прошлом я делал нечто подобное, используя AdvancedDataGrid
и AdvancedDataGridRendererProvider
. Я использую Flex 4.0 SDK, но поскольку компонент AdvancedDataGrid
не изменился между 3.5 и 4.0, код должен быть похожим.
Средство визуализации "MyRenderer.mxml":
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
backgroundColor="{SetBackgroundColor(data)}">
<fx:Script>
<![CDATA[
[Bindable] private var bgColor:uint = 0xFFFFFF;
private function SetBackgroundColor(obj:Object):uint
{
var returnColor:uint = 0xFFFFFF;
if (obj["Quantity"] != null)
{
if (int(obj["Quantity"]) > 6)
{
returnColor = 0xFFF8DD;
}
else
{
returnColor = 0xFFFFFF;
}
return returnColor;
}
override public function set data(value:Object):void
{
super.data = value;
if (value["Quantity"] != null)
{
theLabel.text = value["Quantity"].toString();
}
else
{
theLabel.text = "";
}
}
]]>
</fx:Script>
<mx:Label id="theLabel" />
</mx:HBox>
Использование средства визуализации:
<mx:AdvancedDataGrid dataProvider="{YourArrayCollection}">
<mx:columns>
<mx:AdvancedDataGridColumn id="colQuantity" headerText="Qty" dataField="Quantity"/>
</mx:columns>
<mx:rendererProviders>
<mx:AdvancedDataGridRendererProvider column="{colQuantity}" depth="1" dataField="Quantity" renderer="MyRenderer" />
</mx:rendererProviders>
</mx:AdvancedDataGrid>
РЕДАКТИРОВАТЬ: Я установил backgroundColor в функции, чтобы при повторном использовании itemRenderers функция вызывалась и устанавливал backgroundColor на правильное значение.