Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 根据Flex中的多个条件更改datagrid单元格的背景颜色_Actionscript 3_Apache Flex_Flex4_Flex4.5 - Fatal编程技术网

Actionscript 3 根据Flex中的多个条件更改datagrid单元格的背景颜色

Actionscript 3 根据Flex中的多个条件更改datagrid单元格的背景颜色,actionscript-3,apache-flex,flex4,flex4.5,Actionscript 3,Apache Flex,Flex4,Flex4.5,嗨,我是Adobe Flex的新手,如果我的问题听起来很愚蠢,请道歉。不管怎样,它在这儿。 我正在尝试简单的datagrid,它基本上检查两个条件 1) 如果艺术家为01且唱片集为'Album 01',则将背景设置为'Year'列中的相应单元格 使用下面的代码“将样式设置为背景色”作为属性不起作用,但更改字体颜色起作用,其次,我不确定如何编写代码以使上述嵌套条件起作用?如果有人能在这方面帮助我,我将非常感激。 非常感谢。提前 代码如下: Newdatagrid.mxml <?xml ver

嗨,我是Adobe Flex的新手,如果我的问题听起来很愚蠢,请道歉。不管怎样,它在这儿。 我正在尝试简单的datagrid,它基本上检查两个条件 1) 如果艺术家为01且唱片集为'Album 01',则将背景设置为'Year'列中的相应单元格

使用下面的代码“将样式设置为背景色”作为属性不起作用,但更改字体颜色起作用,其次,我不确定如何编写代码以使上述嵌套条件起作用?如果有人能在这方面帮助我,我将非常感激。 非常感谢。提前

代码如下: Newdatagrid.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 

           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"          minHeight="600" >
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.controls.Alert;
        [Bindable]
        public static var initDG:ArrayCollection = new ArrayCollection([
            {Artist:'01', Album:'Album 01', Year:'2008'},
            {Artist:'01', Album:'Album 02', Year:'2009'},
            {Artist:'03', Album:'Album 03', Year:'2007'},
            {Artist:'03', Album:'Album 04', Year:'2003'},

        ]); 

    ]]>

</fx:Script>


<s:VGroup>
    <s:DataGrid id="myGrid" width="360" dataProvider="{initDG}">   
        <s:columns>
            <s:ArrayList>
                <s:GridColumn dataField="Artist"    headerText="Artist" itemRenderer="CellRenderer"/>
                <s:GridColumn dataField="Album" headerText="Album" itemRenderer="CellRenderer"/>
                <s:GridColumn dataField="Year" headerText="Year" itemRenderer="CellRenderer"/>
            </s:ArrayList>
        </s:columns>       
    </s:DataGrid> 
</s:VGroup>
</s:Application>

渲染器:

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx" 
                    implements="mx.controls.listClasses.IDropInListItemRenderer">
<fx:Script>
    <![CDATA[
        import mx.controls.dataGridClasses.DataGridListData;
        import mx.controls.listClasses.BaseListData;
        import mx.controls.Alert;

        private var _listData:BaseListData;

        [Bindable]private var isSelected:Boolean = false;

        override public function set data( value:Object ) : void 
        {
            super.data = value;
            lblData.text = data[column.dataField];

            if (data[column.dataField].valueOf() >= 2008){
                //styleName="myStyles.BgColor";
                setStyle('backgroundColor',0xFFFF00);
            }else{
                setStyle('backgroundColor',0x32CD32);
            }

        }

        [Bindable]public function get listData() : BaseListData
        {
            return _listData;
        }
        public function set listData( value:BaseListData ) : void
        {
            _listData = value;
        }

    ]]>
</fx:Script>
<s:Label id="lblData" top="9" left="7" width="100%" height="100%"    textAlign="center"/>

</s:GridItemRenderer>

= 2008){
//styleName=“myStyles.BgColor”;
设置样式(“背景色”,0xFFFF00);
}否则{
设置样式(“背景色”,0x32CD32);
}
}
[Bindable]公共函数get listData():BaseListData
{
返回列表数据;
}
公共函数集listData(值:BaseListData):无效
{
_listData=值;
}
]]>

我想要的输出:条件:如果艺术家=01且年份>=2008,则年份的单元格背景将更改为红色

类GridItemRenderer没有此类样式背景色。 所以设置它没有效果

您可以做的是向ItemRenderer添加一个Rect,并根据您的条件设置其颜色属性

例如:

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">

    <fx:Script>
        <![CDATA[
            override public function prepare(hasBeenRecycled:Boolean):void {


                if(this.data) {

                    if(this.data.Year >= 2008 && this.data.Artist == '01' && column.dataField == 'Year') 
                        bgColor.color = 0xFF0000;
                    else
                        bgColor.color = 0xFFFFFF;
                }
            }
        ]]>
    </fx:Script>

    <s:Rect top="0" bottom="0" left="0" right="0">
        <s:fill>
            <s:SolidColor id="bgColor" color="0xFFFFFF"/>
        </s:fill>
    </s:Rect>
    <s:Label id="labelDisplay" top="9" left="7"/>

</s:GridItemRenderer>

=2008&&this.data.Artist='01'&&column.dataField=='Year')
bgColor.color=0xFF0000;
其他的
bgColor.color=0xFFFFFF;
}
}
]]>

----------------------------CellRenderer.mxml------------------------
=2008&&this.data.Artist==01)
bgColor.color=0xFF0000;
其他的
bgColor.color=0xFFFFFF;
}
}
]]>

请参考此链接。谢谢Rajesh,但是我无法获得完整的代码,源代码链接显示该网站已过期。感谢michPooh的及时回复。您的代码高亮显示整行,而我将要求它仅高亮显示与列“年”中的条件匹配的单元格。我所需的输出:条件:例如,如果Artister=01和Year>=2008,则年份的相应单元格背景将更改为红色,在本例中,仅为2008。只需将条件更改为例如,如果(this.data.Year>=2008&&this.data.Artist='01'&&column.dataField='Year')bgColor.color=0xFF0000;else bgColor.color=0xFFFFFF;哇!老兄,非常感谢!因为这个问题,我一直很痛苦!你让我开心。再次感谢!项目呈现器覆盖了spark Datagrid列中定义的标签函数,该函数调用货币格式函数,所以现在该列不显示货币或货币数字格式。您能为此提供解决方案吗?提前谢谢。在itemRenderer中为您的标签对象提供id=“labelDisplay”,并删除代码
lblData.text=data[column.dataField]
。这应该可以做到-我会更新上面的代码谢谢!因为我使用了datagrid的spark组件,所以我使用了覆盖公共函数prepare(hasBeenRecycled:Boolean):void,当我滚动datagrid时,它阻止了我的数据变得不正确。项目呈现器覆盖spark datagrid列中定义的标签函数,该函数调用货币格式函数,因此现在该列不显示货币或数字格式。您能提供解决方案吗?提前感谢。
    <?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 

               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"          minHeight="600" >
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            [Bindable]
            public static var initDG:ArrayCollection = new ArrayCollection([
                {Artist:'01', Album:'Album 01', Year:'2008'},
                {Artist:'01', Album:'Album 02', Year:'2009'},
                {Artist:'03', Album:'Album 03', Year:'2007'},
                {Artist:'03', Album:'Album 04', Year:'2003'},

            ]); 

        ]]>

    </fx:Script>


    <s:VGroup>
        <s:DataGrid id="myGrid" width="360" dataProvider="{initDG}">   
            <s:columns>
                <s:ArrayList>
                    <s:GridColumn dataField="Artist"    headerText="Artist"/>
                    <s:GridColumn dataField="Album" headerText="Album"/>
                    <s:GridColumn dataField="Year" headerText="Year" itemRenderer="CellRenderer"/>
                </s:ArrayList>
            </s:columns>       
        </s:DataGrid> 
    </s:VGroup>
</s:WindowedApplication>

----------------------------CellRenderer.mxml------------------------

    <?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">

    <fx:Script>
        <![CDATA[
            override public function prepare(hasBeenRecycled:Boolean):void {
                lblData.text = data[column.dataField]
                if(this.data) {
                    lblData.text = data[column.dataField];

                    if(this.data.Year >= 2008&&this.data.Artist==01)
                        bgColor.color = 0xFF0000;
                    else
                        bgColor.color = 0xFFFFFF;
                }
            }
        ]]>
    </fx:Script>

    <s:Rect top="0" bottom="0" left="0" right="0">
        <s:fill>
            <s:SolidColor id="bgColor" color="0xFFFFFF"/>
        </s:fill>
    </s:Rect>
    <s:Label id="lblData" top="9" left="7" width="100%" height="100%" textAlign="center"/>

</s:GridItemRenderer>