2009-04-14 12 views
6

Potrzebuję programowo zmienić kolor tła dla pojedynczego wiersza w datagrid w Flex. Przeszukałem sieć i odnalazłem odwołanie do "dg.setPropertiesAt", które nie jest obsługiwaną metodą (według kompilatora). Ponadto istnieją sugestie dotyczące rozszerzenia metody dg "drawRowBackground", ale muszę ustawić tło na zewnątrz (nie z logiki wewnątrz dg).Ustawianie koloru tła dla wiersza datagrid w Adobe Flex

Wszelkie sugestie są mile widziane.

TIA, Bob

Odpowiedz

3

zastanawiałem się samo zaledwie kilka dni temu. Jeśli masz wersję Pro Flex, jego AdvancedDataGrid ma wbudowaną właściwość "styleFunction" do obsługi tego. Jeśli masz tylko regularne DataGrid poręczny, to może pomóc:

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

Komentarz tam linki do dokumentacji styleFunction:

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

poza tym, sugestii Stiggler za stosując itemRenderer jest twoim drugim regresem.

0
dg.setPropertiesAt(3, {backgroundColor:0xFF0000}); 

Gdzie dg to twój datagrid, a liczba 3 to kolor rzędu siatki.

2

I udało się go poprzez rozszerzenie klasy DataGrid i tworząc własną metodę, tak:

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); 
} 

To był inspirowany metodą drawRowBackgrounds klasy DataGrid.

Mam nadzieję, że to pomaga.

3

Użyj tego z 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> 

W kodzie aplikacji:

<s:DataGrid> 
    <s:rowBackground> 
     <fx:Component><my:DataGridRowBackground /></fx:Component> 
    </s:rowBackground> 
</s:DataGrid> 

Kluczowym elementem jest IGridVisualElement interfejs, który pozwala powiązać do dataProvider . Ten interfejs jest wywoływany przez GridLayout. Patrz: http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/gridClasses/GridLayout.as. Możesz użyć dowolnego IVisualElement jako mechanizmu renderującego w tle, ale z s: DefaultGridItemRenderer masz pewną funkcjonalność po wyjęciu z pudełka.

Mam nadzieję, że to pomoże

Powiązane problemy