Настройка цвета фона для строки сетки данных в Adobe Flex
Мне нужно программно изменить цвет фона для одной строки в сетке данных во Flex. Я просмотрел сеть и нашел ссылку на "dg.setPropertiesAt", который не поддерживается (по словам компилятора). Кроме того, есть предложения по расширению метода drawRowBackground dg, но мне нужно установить фон извне (не из логики внутри dg).
Любые предложения приветствуются.
ТИА, Боб
5 ответов
Вы должны будете использовать itemRenderer, чтобы выполнить это. Смотрите следующие примеры для получения дополнительной информации:
http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&postId=61&productId=2
Используйте это с spark.DataGrid
DataGridRowBackground.mxml:
<?xml version="1.0" encoding="utf-8"?>
<s:DefaultGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
implements="spark.components.gridClasses.IGridVisualElement"
backgroundColor="{data.color}" background="true">
<fx:Script>
<![CDATA[
import spark.components.Grid;
public function prepareGridVisualElement(grid:Grid, rowIndex:int, columnIndex:int):void
{
if (!grid.dataProvider || rowIndex >= grid.dataProvider.length)
data = null;
else
data = grid.dataProvider.getItemAt(rowIndex);
}
]]>
</fx:Script>
</s:DefaultGridItemRenderer>
В коде вашего приложения:
<s:DataGrid>
<s:rowBackground>
<fx:Component><my:DataGridRowBackground /></fx:Component>
</s:rowBackground>
</s:DataGrid>
Ключевым элементом является интерфейс IGridVisualElement, который позволяет вам связываться с вашим dataProvider. Этот интерфейс вызывается GridLayout. См. http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/gridClasses/GridLayout.as. Вы можете использовать любой IVisualElement в качестве фонового средства визуализации, но с s:DefaultGridItemRenderer у вас есть некоторые функциональные возможности из коробки.
Надеюсь это поможет
Я справился с этим, расширив класс DataGrid и создав собственный метод, например так:
public function paintRow(rowNumber:Number,color:uint):void{
var rowBGs:Sprite=Sprite(listContent.getChildByName("rowBGs"));
drawRowBackground(rowBGs,rowNumber,listContent.rowInfo[rowNumber].y,listContent.rowInfo[rowNumber].height,color,null);
}
Это было вдохновлено методом drawRowBackgrounds класса datagrid.
Надеюсь, поможет.
Мне было интересно то же самое всего пару дней назад. Если у вас есть Pro версия Flex, ее AdvancedDataGrid имеет встроенное свойство styleFunction, чтобы справиться с этим. Если у вас есть только обычный DataGrid, это может помочь:
http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=2&postId=12548
Комментарий там ссылки на документацию styleFunction:
Кроме того, предложение Стигглера об использовании itemRenderer - ваш другой выход.
dg.setPropertiesAt(3, {backgroundColor:0xFF0000});
Где dg - ваша сетка данных, а число 3 - цвет строки вашей сетки.