2012-01-16 42 views
0

我想爲火花DataGrid中的所有列使用相同的自定義渲染器。我需要知道dataFieldcolumnIndex的基礎,我可以在我的自定義itemrenderer中更改stateFlex:在自定義itemrenderer中爲火花數據網格獲取列索引

早些時候在mx:DataGrid中,可以通過擴展MXDataGridItemRenderer實現IDropInListItemRenderer,因此dataGridListData屬性可用。

但是使用火花DataGrid,我擴展GridItemRenderer哪些不執行IDropInListItemRenderer,因此無法訪問dataGridListData屬性。我試圖編寫一個擴展GridItemRenderer並實現dataGridListData的動作腳本類,但flex會在此變量的set函數中引發錯誤。

任何人都可以幫助我完成這個任務嗎?用於mx:DataGrid [工作代碼]

//樣品的itemRenderer

<fx:Script> 
    <![CDATA[ 
     import mx.events.FlexEvent; 

     import scripts.valueObjects.CellRendererVO; 

     private var _cellRenderer:CellRendererVO = new CellRendererVO(); 
     [Bindable] 
     private var _lineColor:uint = 0xFF0000; 
     [Bindable] 
     private var _lineWidth:int = 5; 

     override public function set data(value:Object):void 
     { 
      //able to access the dataGridListData.dataField variable 
      _cellRenderer = (value[dataGridListData.dataField] as CellRendererVO); 
      currentState = _cellRenderer.stateName; 
     } 

     private function connectingLinesState_enterStateHandler(event:FlexEvent):void 
     { 
     } 

     protected function orgChartNodeState_enterStateHandler(event:FlexEvent):void 
     { 
     } 

    ]]> 
</fx:Script> 

<s:states> 

    <s:State name="emptyState" /> 

    <s:State name="orgChartNodeState" enterState="orgChartNodeState_enterStateHandler(event)"/> 

    <s:State name="connectingLinesState" enterState="connectingLinesState_enterStateHandler(event)"/> 

</s:states> 

<s:HGroup width="100%" height="100%" includeIn="orgChartNodeState" 
      horizontalAlign="center" verticalAlign="middle"> 


</s:HGroup> 

<s:HGroup width="100%" height="100%" includeIn="connectingLinesState" 
      gap="0" horizontalAlign="center" verticalAlign="middle" 
      paddingLeft="0" paddingRight="0" paddingTop="0" 
      paddingBottom="0"> 


</s:HGroup> 

//樣品數據網格火花的itemRenderer [不工作]

包customComponents.myOrgChart { import mx.controls.dataGridClasses.DataGridListData; import mx.controls.listClasses.BaseListData; import mx.controls.listClasses.IDropInListItemRenderer; import mx.controls.listClasses.IListItemRenderer;

import spark.components.gridClasses.GridItemRenderer; 

public class TestRenderer extends GridItemRenderer implements IListItemRenderer, IDropInListItemRenderer 
{ 

    private var _listData:BaseListData; 

    public function TestRenderer() 
    { 
     super(); 
    } 

    override public function set data(value:Object):void 
    { 
     //Flex throws error here. 
     //ERROR: TypeError: Error #1009: Cannot access a property or method of a null object reference. 
     trace('dataField: ' + DataGridListData(listData).dataField); 
    } 

    public function get listData():BaseListData 
    { 
     return _listData; 
    } 

    public function set listData(value:BaseListData):void 
    { 
     _listData = value; 
    } 
} 

}

感謝,

安吉

回答

3

星火GridItemRenderer仍具有data屬性,就像任何其他的ItemRenderer呢,所以你的罰款那裏。

除此之外,您還需要的是column屬性,該屬性返回GridColumn實例。這與您在創建DataGrid時可能在mxml中定義的實例相同,因此它具有其所有屬性。你最常用的是dataFieldcolumnIndex

例如:

var value:* = data[column.dataField]; 
var index:int = data[column.columnIndex]; 
+0

感謝您的答覆。我已經使用了列對象,但它仍然會拋出相同的錯誤。 – Anji 2012-01-16 09:49:20

+0

@安吉這真的不應該發生。你並沒有試圖將它轉換爲DataGridListData,對嗎? – RIAstar 2012-01-16 10:43:39

+0

不是。這是我想要做的。在設置數據函數中,我添加了行'data [column.dataField]',我得到了錯誤 – Anji 2012-01-16 13:16:07

相關問題