2011-02-24 2 views
1

데이터 그리드 열에 대한 몇 가지 항목 렌더러가있는 고급 DataGrid를 정의한 viewBase라는보기 구성 요소가 있습니다. 이제는 동일한 view viewBase 구성 요소를 사용해야하는 요구 사항이 있지만 모든 항목 렌더러를 사용할 필요는 없습니다.DataGrid 구성 요소에 대한 열 항목 렌더러를 동적으로 재정의하는 방법

누구나 pls가 뷰 구성 요소에 선언 된 itemrenderers를 재정의하는 방법을 말해 줄 수 있습니까? 당신은 당신이 아래의 예처럼 떨어지게 할 수있는 AdvancedDataGrid, 동적 만들 필요가있는 렌더러 중 하나와 구성 요소 ViewBase이있는 경우

+1

코드를 살펴볼 수 있습니까? –

+0

나는 당신이 무엇을 요구하고 있는지 이해하지 못합니다. 코드는 우리가 이해하는 데 도움이 될 수 있습니다. itemRenderer는 DataGrid 열의 속성이므로 다른 것을 수행하기 위해 재정의 할 수 있습니다. 그러나 itemRenderer는 DataGrid 열을 만드는 데 사용 된 구성 요소를 참조 할 수도 있습니다.이 경우 DataGrid 열을 재정의하지 않고 확장 할 수 있습니다. – JeffryHouser

답변

1

(threatLevel에 대한 렌더러는 동적) : 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> 

그런 다음, 다음과 같이 서로 다른 렌더러와 같은 구성 요소의 사용의 예는 수 :

: ThreatRenderer 예를 들어, 사용자 정의 렌더러입니다

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

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; 
    } 

} 

관련 문제