2009-04-14 10 views
6

Necesito cambiar de forma programática el color de fondo de una sola fila en una cuadrícula de datos en Flex. Revisé la red y encontré una referencia a "dg.setPropertiesAt", que no es un método compatible (según el compilador). Además, hay sugerencias para extender el método "drawRowBackground" del dg, pero necesito establecer el fondo externamente (no desde la lógica dentro del dg).Configuración del color de fondo para la fila de la cuadrícula de datos en Adobe Flex

Todas y cada una de las sugerencias son bienvenidas.

TIA, Bob

Respuesta

3

Me preguntaba lo mismo hace sólo un par de días. Si tiene la versión Pro de Flex, su AdvancedDataGrid tiene la propiedad incorporada "styleFunction" para manejar esto. Si sólo tienes la cuadrícula de datos regulares práctico, esto podría ayudar:

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

Un comentario que hay enlaces a la documentación de styleFunction:

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

Más allá de eso, la sugerencia de Stiggler para el uso de una itemRenderer es tu otro recurso.

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

Donde dg es su cuadrícula de datos y el número 3 es el color de la fila de su cuadrícula.

2

lo logré extendiendo la clase DataGrid y crear mi propio método, como esto:

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

Esto fue inspirada por el método de la clase drawRowBackgrounds cuadrícula de datos.

Espero que ayude.

3

usar esto con 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> 

En su código de aplicación:

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

El elemento clave es la interfaz IGridVisualElement que le permite fijarse a los dataProvider . GridLayout llama a esta interfaz. Ver: http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/gridClasses/GridLayout.as. Puede usar cualquier IVisualElement como renderizador de fondo, pero con s: DefaultGridItemRenderer tiene algunas funcionalidades listas para usar.

Espero que esto ayude

Cuestiones relacionadas