简体   繁体   中英

Setting background color for datagrid row in Adobe Flex

I need to programmatically change the background color for a single row in a datagrid in Flex. I've scoured the Net and found reference to "dg.setPropertiesAt," which is not a supported method (according to the compiler). Also, there are suggestions to extend the dg's "drawRowBackground" method but I need to set the background externally (not from logic inside the dg).

Any and all suggestions welcome.

TIA, Bob

Use this with 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>

In your app code:

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

The key element is IGridVisualElement interface which lets you bind to your dataProvider. This interface is called by GridLayout. See: http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/gridClasses/GridLayout.as . You can use any IVisualElement as a background renderer, but with s:DefaultGridItemRenderer you have some functionality out of the box.

Hope this helps

I managed it by extending the DataGrid class and creating my own method, like this:

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

This was inspired by the drawRowBackgrounds method of the datagrid class.

Hope it helps.

I was wondering the same thing just a couple of days ago. If you have the Pro version of Flex, its AdvancedDataGrid has the built-in "styleFunction" property to handle this. If you've only got the regular DataGrid handy, this might help:

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

A comment there links to documentation of styleFunction:

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

Beyond that, Stiggler's suggestion for using an itemRenderer is your other recourse.

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

其中dg是您的数据网格,数字3是网格的行颜色。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM