在 Adobe Flex 中设置数据网格行的背景颜色
Posted
技术标签:
【中文标题】在 Adobe 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
【讨论】:
看起来这样就可以了...谢谢,鲍勃以上是关于在 Adobe Flex 中设置数据网格行的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
Adobe Flex:尝试验证数据网格输入时出现错误#1034
在 ActionScript 3.0 中以编程方式检测 Adobe Air 和 Adobe Flex