6

我需要以编程方式更改 Flex 中数据网格中单行的背景颜色。我搜索了网络并找到了对“dg.setPropertiesAt”的引用,这不是受支持的方法(根据编译器)。此外,有建议扩展 dg 的“drawRowBackground”方法,但我需要在外部设置背景(而不是从 dg 内部的逻辑)。

欢迎任何和所有建议。

TIA,鲍勃

4

5 回答 5

6

您必须使用 itemRenderer 才能完成此操作。有关详细信息,请参阅以下示例:

http://butterfliesandbugs.wordpress.com/2007/07/11/using-an-itemrenderer-to-change-the-background-of-a-datagrid-cell/

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

于 2009-04-14T16:18:46.640 回答
3

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.

于 2010-04-15T16:52:20.390 回答
3

几天前我也在想同样的事情。如果你有 Flex 的 Pro 版本,它的 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 的建议是您的另一种选择。

于 2009-04-14T20:57:21.777 回答
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 接口,可让您绑定到 dataProvider。该接口由 GridLayout 调用。请参阅: http: //opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/gridClasses/GridLayout.as。您可以将任何 IVisualElement 用作背景渲染器,但使用 s:DefaultGridItemRenderer 您可以获得一些开箱即用的功能。

希望这可以帮助

于 2012-11-01T11:48:06.700 回答
0
dg.setPropertiesAt(3, {backgroundColor:0xFF0000});

Where dg is your datagrid and the number 3 is the row color of your grid.

于 2009-10-24T20:38:57.760 回答