在 Adob​​e Flex 中设置数据网格行的背景颜色

Posted

技术标签:

【中文标题】在 Adob​​e Flex 中设置数据网格行的背景颜色【英文标题】:Setting background color for datagrid row in Adobe Flex 【发布时间】:2010-10-19 09:24:54 【问题描述】:

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

欢迎提出任何建议。

TIA, 鲍勃

【问题讨论】:

【参考方案1】:

我通过扩展 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 方法的启发。

希望对你有帮助。

【讨论】:

【参考方案2】:

将其与 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 您可以获得一些开箱即用的功能。

希望对你有帮助

【讨论】:

【参考方案3】:
dg.setPropertiesAt(3, backgroundColor:0xFF0000);

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

您必须使用 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

【讨论】:

看起来这样就可以了...谢谢,鲍勃

以上是关于在 Adob​​e Flex 中设置数据网格行的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

Adobe Flex:尝试验证数据网格输入时出现错误#1034

在 ActionScript 3.0 中以编程方式检测 Adob​​e Air 和 Adob​​e Flex

使用 Adob​​e AIR 构建插件架构

如何在 Adob​​e Flex 中合并 DataGrid/Advanced DataGrid 中的单元格

将 Flex 转换为 Adob​​e Air

2021 年的 Adob​​e flex