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