我正在尝试访问itemRenderer中的DataGridColumn的dataField。下面是dataGrid:
<mx:Script>
<![CDATA[
[Bindable] public var weeksOfMoth:ArrayCollection = new ArrayCollection([
{monday:30, tuesday:31, wednesday:1, thursday:2, friday:3, saturday:4, sunday:5},
{monday:6, tuesday:7, wednesday:8, thursday:9, friday:10, saturday:11, sunday:12},
{monday:13, tuesday:14, wednesday:15, thursday:16, friday:17, saturday:18, sunday:19},
{monday:20, tuesday:21, wednesday:22, thursday:23, friday:24, saturday:25, sunday:26},
{monday:27, tuesday:28, wednesday:29, thursday:30, friday:1, saturday:2, sunday:3}
]);
]]>
</mx:Script>
<mx:DataGrid dataProvider="{weeksOfMoth}" >
<mx:columns>
<mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="monday" />
<mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="tuesday" />
<mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="wednesday" />
<mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="thursday" />
<mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="friday" />
<mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="saturday" />
<mx:DataGridColumn itemRenderer="view.DateRenderer" dataField="sunday" />
</mx:columns>
</mx:DataGrid>
这是我的ItemRenderer:
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Box >
<!-- How do I get the dataField here?? -->
<mx:Label text="{data[dataField]}" />
</mx:Box>
</mx:Canvas>
在itemRenderer的set data函数中,我收到一整周(这没关系),但是itemRenderer不知道使用哪一天,因为dataField是未知的。有没有人知道如何在itemRenderer中访问此dataField?
答案 0 :(得分:7)
www.Flextras.com的评论帮助我找到了解决方案。我确实可以使用listData.dataField
,但首先需要实现IDropInListItemRenderer
类。
最终ItemRenderer
:
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" implements="mx.controls.listClasses.IDropInListItemRenderer" >
<mx:Script>
<![CDATA[
import mx.controls.dataGridClasses.DataGridListData;
import mx.controls.listClasses.BaseListData;
// Internal variable for the property value.
private var _listData:DataGridListData;
// Make the listData property bindable.
[Bindable("dataChange")]
// Define the getter method.
public function get listData():BaseListData
{
return _listData;
}
// Define the setter method,
public function set listData(value:BaseListData):void
{
_listData = DataGridListData(value);
}
]]>
</mx:Script>
<mx:Box width="80%" height="80%" verticalCenter="0" horizontalCenter="0" backgroundColor="#FFFFFF">
<mx:Label text="{data[_listData.dataField]}" />
</mx:Box>
</mx:Canvas>
答案 1 :(得分:3)
使用传递给渲染器的DataGridListData类。它包含dataField属性。
我很确定这应该有效:
<mx:Label text="{data[listData.dataField]}" />
答案 2 :(得分:2)
您不必实现IDropInListItemRenderer。 这就足够了:
data[ ( listData as DataGridListData ).dataField ]
具体的listData属于DataGridListData类型,但属性本身类型为BaseListData,因为渲染器可用于各种场景。但是,在这种情况下,我们知道它是DataGridListData,因此我们可以简单地将其转换为访问dataField属性。
答案 3 :(得分:0)
以下适用于MX AdvancedDataGrid中基于Spark的项呈示器:
<?xml version="1.0" encoding="utf-8"?>
<s:MXAdvancedDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="100%"
>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.controls.dataGridClasses.DataGridListData;
override public function set data( value:Object):void {
var latency:Number = value[ ( this.listData as DataGridListData).dataField] as Number;
lbl.text = Utils.formatLatency( latency);
if( latency > 1000000) { // 1s => error
lbl.setStyle( "backgroundColor", 0xFF8080);
} else if( latency > 100000) { // 100ms => warning
lbl.setStyle( "backgroundColor", 0xFFFF80);
} else if( latency > 0){ // low latency
lbl.setStyle( "backgroundColor", 0x80FF80);
}
}
]]>
</fx:Script>
<s:Label id="lbl" width="100%" height="100%" verticalAlign="middle" textAlign="right" paddingRight="5"/>
</s:MXAdvancedDataGridItemRenderer>
答案 4 :(得分:0)
更简单: 只需使用属性
advancedDataGridListData
dataGridListData
访问该信息。
答案 5 :(得分:0)
对于平均GridItemRenderer,它是
column.dataField
所以,在你的情况下,这应该有效:
<s:Label text="{data[column.dataField]}" />