Настройка цвета фона для строки сетки данных в Adobe Flex - PullRequest
6 голосов
/ 14 апреля 2009

Мне нужно программно изменить цвет фона для отдельной строки в сетке данных во Flex. Я просмотрел сеть и нашел ссылку на «dg.setPropertiesAt», который не поддерживается (по словам компилятора). Кроме того, есть предложения по расширению метода drawRowBackground dg, но мне нужно установить фон извне (не из логики внутри dg).

Любые предложения приветствуются.

ТИА, Боб

Ответы [ 5 ]

6 голосов
/ 14 апреля 2009

Вы должны будете использовать itemRenderer, чтобы выполнить это. См. Следующие примеры для получения дополнительной информации:

http://butterfliesandbugs.wordpress.com/2007/07/11/using-an-itemrenderer-to-change-the-background-of-a-datagrid-cell/

http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&postId=61&productId=2

3 голосов
/ 01 ноября 2012

Используйте это с 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 у вас есть некоторые функциональные возможности из коробки.

Надеюсь, это поможет

3 голосов
/ 15 апреля 2010

Я справился с этим, расширив класс 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.

Надеюсь, это поможет.

3 голосов
/ 15 апреля 2009

Мне было интересно то же самое всего пару дней назад. Если у вас есть Pro версия Flex, ее AdvancedDataGrid имеет встроенное свойство styleFunction, чтобы справиться с этим. Если у вас есть только обычный DataGrid, это может помочь:

http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=2&postId=12548

Комментарий там ссылки на документацию styleFunction:

http://livedocs.adobe.com/flex/3/langref/mx/controls/advancedDataGridClasses/AdvancedDataGridBase.html#styleFunction

Кроме того, предложение Стигглера использовать itemRenderer - ваш другой выход.

0 голосов
/ 25 октября 2009
dg.setPropertiesAt(3, {backgroundColor:0xFF0000});

Где dg - ваша сетка данных, а число 3 - цвет строки вашей сетки.

...