2009-04-14 14 views
6

Je dois modifier par programme la couleur d'arrière-plan d'une seule ligne d'une grille de données dans Flex. J'ai parcouru le Net et trouvé la référence à "dg.setPropertiesAt", qui n'est pas une méthode supportée (selon le compilateur). En outre, il existe des suggestions pour étendre la méthode "drawRowBackground" du dg mais j'ai besoin de définir l'arrière-plan en externe (pas de logique à l'intérieur du dg).Définition de la couleur d'arrière-plan pour la ligne DataGrid dans Adobe Flex

Toutes les suggestions sont les bienvenues.

TIA, Bob

Répondre

3

Je me demandais la même chose il y a juste quelques jours. Si vous avez la version Pro de Flex, son AdvancedDataGrid a la propriété intégrée "styleFunction" pour gérer cela. Si vous avez seulement le DataGrid régulier à portée de main, cela pourrait aider:

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

Un commentaire il y a des liens vers la documentation de styleFunction:

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

Au-delà, la suggestion de Stiggler pour l'utilisation d'un itemRenderer est votre autre recours.

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

Où dg est votre datagrid et le numéro 3 est la couleur de ligne de votre grille.

2

J'ai réussi en étendant la classe DataGrid et créer ma propre méthode, comme ceci:

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

Cela a été inspiré par la méthode drawRowBackgrounds de la classe DataGrid.

Espérons que ça aide.

3

utiliser avec 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> 

Dans votre code de l'application:

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

L'élément clé est l'interface IGridVisualElement qui vous permet de lier à votre fournisseur de données . Cette interface est appelée par GridLayout. Voir: http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/gridClasses/GridLayout.as. Vous pouvez utiliser n'importe quel IVisualElement comme moteur de rendu d'arrière-plan, mais avec s: DefaultGridItemRenderer, vous avez des fonctionnalités prêtes à l'emploi.

Espérons que cela aide