如何动态覆盖datagrid组件的列项呈示器

时间:2011-02-24 20:59:03

标签: flex actionscript-3

我有一个名为viewBase的视图组件,我在其中定义了一个高级数据网格,其中包含几个用于datagrid列的项呈示器。现在我有一个要求,我需要使用相同的视图viewBase组件,但不要求使用任何项目渲染器。

有人可以告诉我如何覆盖在视图组件中声明的itemrenderer吗?

1 个答案:

答案 0 :(得分:1)

如果你有一个带有AdvancedDataGrid的组件ViewBase,你需要在其中创建一个动态的渲染器,你可以像下面的例子那样做(威胁级别的渲染器是动态的): mx:Script>

        import mx.collections.ArrayCollection;
        import mx.controls.advancedDataGridClasses.AdvancedDataGridItemRenderer;
        [Bindable]
        public var monitoringArrayCollection : ArrayCollection;
        [Bindable]
        public var threatRendererClass : Class = AdvancedDataGridItemRenderer;

/mx:Script>

<mx:AdvancedDataGrid dataProvider="{monitoringArrayCollection}">
    <mx:columns>
        <mx:AdvancedDataGridColumn dataField="firstName" />
        <mx:AdvancedDataGridColumn dataField="lastName" />
        <mx:AdvancedDataGridColumn dataField="threatLevel" itemRenderer="{new ClassFactory(threatRendererClass)}" />
    </mx:columns>
</mx:AdvancedDataGrid>

import mx.collections.ArrayCollection; import mx.controls.advancedDataGridClasses.AdvancedDataGridItemRenderer; [Bindable] public var monitoringArrayCollection : ArrayCollection; [Bindable] public var threatRendererClass : Class = AdvancedDataGridItemRenderer;

然后,使用具有不同渲染器的此类组件的示例可以如下:

<mx:AdvancedDataGrid dataProvider="{monitoringArrayCollection}"> <mx:columns> <mx:AdvancedDataGridColumn dataField="firstName" /> <mx:AdvancedDataGridColumn dataField="lastName" /> <mx:AdvancedDataGridColumn dataField="threatLevel" itemRenderer="{new ClassFactory(threatRendererClass)}" /> </mx:columns> </mx:AdvancedDataGrid>

其中

<mx:VBox>
    <components:ViewBase />
    <components:ViewBase threatRendererClass="{ThreatRenderer}" />      
</mx:VBox>
是自定义渲染器,例如:

<mx:VBox> <components:ViewBase /> <components:ViewBase threatRendererClass="{ThreatRenderer}" /> </mx:VBox>

ThreatRenderer