我需要以编程方式更改 Flex 中数据网格中单行的背景颜色。我搜索了网络并找到了对“dg.setPropertiesAt”的引用,这不是受支持的方法(根据编译器)。此外,有建议扩展 dg 的“drawRowBackground”方法,但我需要在外部设置背景(而不是从 dg 内部的逻辑)。
欢迎任何和所有建议。
TIA,鲍勃
我需要以编程方式更改 Flex 中数据网格中单行的背景颜色。我搜索了网络并找到了对“dg.setPropertiesAt”的引用,这不是受支持的方法(根据编译器)。此外,有建议扩展 dg 的“drawRowBackground”方法,但我需要在外部设置背景(而不是从 dg 内部的逻辑)。
欢迎任何和所有建议。
TIA,鲍勃
您必须使用 itemRenderer 才能完成此操作。有关详细信息,请参阅以下示例:
http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&postId=61&productId=2
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.
几天前我也在想同样的事情。如果你有 Flex 的 Pro 版本,它的 AdvancedDataGrid 有内置的“styleFunction”属性来处理这个问题。如果您手边只有常规的 DataGrid,这可能会有所帮助:
http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=2&postId=12548
那里的评论链接到 styleFunction 的文档:
除此之外,Stiggler 对使用 itemRenderer 的建议是您的另一种选择。
将此与 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 您可以获得一些开箱即用的功能。
希望这可以帮助
dg.setPropertiesAt(3, {backgroundColor:0xFF0000});
Where dg is your datagrid and the number 3 is the row color of your grid.