我有一个网格数据,并且想要根据条件设置网格行的bg颜色,如果有flag = 1那么背景网格行将显示为灰色,否则就像它在动作脚本文件中一样。我用过blazeds服务。
请帮帮我。我已经尝试过setStyle(),但没有成功。
提前致谢。
答案 0 :(得分:1)
这是一个动作脚本3解决方案。 您需要在特殊的itemRenderer类中执行此操作。 我建议你扩展Label类,并在其中覆盖updateDisplayList函数。
public class DynamicItemRenderer extends Label
{
private var _backgroundColorFunction:Function=null;
override protected function commitProperties():void
{
super.commitProperties();
var cellBackgroundColor:Boolean=this.document.hasOwnProperty("cellColorFunction");
if (cellBackgroundColor && _backgroundColorFunction == null)
{
_backgroundColorFunction=this.document.cellColorFunction as Function;
}
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (_backgroundColorFunction != null)
{
_backgroundColorFunction.call(this, data, graphics, unscaledWidth, unscaledHeight);
}
}
}
然后在mxml文件中,定义了DataGrid,你需要设置一个为单元格着色的函数,它将是你的backgroundColorFunction。
<mx:Script>
<![CDATA[
public function cellColorFunction(... args):void
{
var item:Object=args[0];
var g:Graphics=args[1] as Graphics;
var width:Number=args[2] as Number;
var height:Number=args[3] as Number;
g.clear();
if (grid.isItemSelected(item) || grid.isItemHighlighted(item))
return;
if (item.flag == 1)
{
g.beginFill(0xE2E2E2);
g.drawRect(0, 0, width, height + 4);
g.endFill();
}
}
]]>
</mx:Script>
然后你需要在gridColumn上定义项目渲染器,就是这样。
<mx:DataGridColumn itemRenderer="path.to.your.DynamicItemRenderer"/>
这是我提出的最佳解决方案。 如果有人知道更好的方式,我希望看到它:)