如何根据动作脚本文件中的条件设置网格中的背景颜色

时间:2014-01-13 06:24:00

标签: actionscript-3 flex3

我有一个网格数据,并且想要根据条件设置网格行的bg颜色,如果有flag = 1那么背景网格行将显示为灰色,否则就像它在动作脚本文件中一样。我用过blazeds服务。

请帮帮我。我已经尝试过setStyle(),但没有成功。

提前致谢。

1 个答案:

答案 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"/>

这是我提出的最佳解决方案。 如果有人知道更好的方式,我希望看到它:)