2009-04-14 71 views
6

我需要以編程方式更改Flex中數據網格中單個行的背景顏色。我搜索了網絡,發現對「dg.setPropertiesAt」的引用,它不是受支持的方法(根據編譯器)。此外,還有一些建議可以擴展dg的「drawRowBackground」方法,但我需要在外部設置背景(而不是從dg內部的邏輯)。在Adobe Flex中爲datagrid行設置背景顏色

歡迎任何和所有建議。

TIA, 鮑勃

回答

3

我只是一個前兩天知道同樣的事情。如果你有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

除此之外,Stiggler的建議使用的itemRenderer是您的其他追索權。

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

其中dg是您的數據網格,3是網格的行顏色。

2

我設法它通過擴展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); 
} 

這是由DataGrid類的drawRowBackgrounds方法的啓發。

希望它有幫助。

3

使用此與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接口,它可以讓您綁定到您的數據提供程序。 該接口由GridLayout調用。請參閱:http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/gridClasses/GridLayout.as。你可以使用任何IVisualElement作爲後臺渲染器,但是使用s:DefaultGridItemRenderer,你可以使用一些開箱即用的功能。

希望這會有所幫助