我正在尝试实现一个带有页脚的数据网格,如此类所定义的那样:
https://github.com/ncdc/flex-footer-datagrid
它工作得很好。尽管如此,在第二步中,我尝试使用此包在一列上实现一个 itemrenderer,以便以特定样式显示值。
这是我的代码
<footerDataGrid:FooterDataGrid
id="dg_imActivity" width="100%"
dropEnabled="true"
dragDrop="model.checkIfActivityExixts(event)"
dataProvider="{grant!=null?model.activities.grantItems:null}"
editable="true"
itemEditEnd="EditBudgetValue(event)"
rowCount="{grant!=null?dg_imActivity.dataProvider.length + 2:6}"
>
<footerDataGrid:columns>
<mx:DataGridColumn headerText="Title" dataField="title" showDataTips="true" dataTipField="title" editable="false"/>
<mx:DataGridColumn headerText="Type" dataField="type" showDataTips="true" dataTipField="type" editable="false"/>
<mx:DataGridColumn headerText="Pr. Area" dataField="prioAreaName" showDataTips="true" dataTipField="prioAreaName" editable="false"/>
<mx:DataGridColumn headerText="Unit" dataField="unitName" showDataTips="true" dataTipField="unitName" editable="false">
<mx:itemRenderer>
<fx:Component>
<mx:HBox paddingLeft="2" horizontalScrollPolicy="off">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.states.SetStyle;
override public function set data( value:Object ) : void {
super.data = value;
if( data.unitName != outerDocument.user.profile.organ.name ) {
setStyle("color",0xFF0000);
setStyle("fontWeight", "bold");
}else{
setStyle("color",0xffffff);
setStyle("fontWeight", "normal");
}
}
]]>
</fx:Script>
<mx:Label text="{data.unitName}" width="100%"/>
</mx:HBox>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="Value" dataField="budgetValue" id="budgetValue" showDataTips="true" dataTipField="budgetValue" editable="true"/>
</footerDataGrid:columns>
<footerDataGrid:footer>
<footerDataGrid:SummaryFooter>
<footerDataGrid:columns>
<footerDataGrid:SummaryColumn label='Total'/>
<footerDataGrid:SummaryColumn />
<footerDataGrid:SummaryColumn />
<footerDataGrid:SummaryColumn />
<footerDataGrid:SummaryColumn operation='sum' precision='2'/>
</footerDataGrid:columns>
</footerDataGrid:SummaryFooter>
<footerDataGrid:SummaryFooter>
<footerDataGrid:columns>
<footerDataGrid:SummaryColumn label='Remaining Budget'/>
<footerDataGrid:SummaryColumn />
<footerDataGrid:SummaryColumn />
<footerDataGrid:SummaryColumn />
<footerDataGrid:SummaryColumn labelFunction='remainingBudgetActivity' dataColumn='{budgetValue}'/>
</footerDataGrid:columns>
</footerDataGrid:SummaryFooter>
</footerDataGrid:footer>
</footerDataGrid:FooterDataGrid>
我收到项目渲染器的错误。
ReferenceError: Error #1069: Property unitName not found on mx.controls.dataGridClasses.DataGridColumn and there is no default value.
显示阿贝尔时不带样式。一切都正确定义。显然方法集 data() 被正确调用,但它无法检索数据对象,我不知道原因。此外,我已经尝试使用默认数据网格并且它正在工作。
你能告诉我如何解决这个问题吗?我需要使用此包,因为我需要在数据网格中显示页脚。
为什么,但在这个包中,我必须添加一个测试以查看对象属性是否存在:
if( "unitName" in data){
if( data.unitName != outerDocument.user.profile.organ.name ) {
setStyle("color",0xFF0000);
setStyle("fontWeight", "bold");
}else{
setStyle("color",0x000000);
setStyle("fontWeight", "normal");
}
}
现在一切都在正常。这很奇怪,因为使用默认数据网格,不需要测试。