sanjeev
sanjeev

Reputation: 74

How to override the column item renderers for the datagrid component dynamically

I have a view component called viewBase where I defined a advanced datagrid with few item renderers for datagrid columns. Now I have a requirement where I need to use the same view viewBase component, but not required to use any item renderers.

Can anybody pls tell me how to override the itemrenderers which are declared in a view component?

Upvotes: 1

Views: 1211

Answers (1)

Maria Sakharova
Maria Sakharova

Reputation: 1379

If you have a component ViewBase with AdvancedDataGrid, one of the renderers of which you need to make dynamic, you could do smth like in the example below (renderer for threatLevel is dynamic): 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>

Then, the example of usage of such component with different renderers could be as follows:

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

Where ThreatRenderer is a custom renderer, for example:

public class ThreatRenderer extends UIComponent implements IDataRenderer, IListItemRenderer
{
    private var _data : Object;
    private var _dataChanged : Boolean = false;

    public function get data():Object
    {
        return _data;
    }

    public function set data(value:Object):void
    {
        _data = value;
        _dataChanged = true;
        invalidateDisplayList();
    }

    protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        super.updateDisplayList(unscaledWidth, unscaledHeight);
        if (!_dataChanged || !data) return;
        var g : Graphics = this.graphics;
        g.clear();
        g.beginFill(0xFF0000, 1);
        g.drawRect(0, 0, unscaledWidth*Number(data.threatLevel)/100, unscaledHeight);
        _dataChanged = false;
    }

}

Upvotes: 1

Related Questions