2009-11-27 35 views
4

我有這樣的DataGrid:設置的DataGridColumn的ItemRenderer的動態

<mx:DataGrid id="myDataGrid"> 
    <mx:columns> 
     <mx:DataGridColumn dataField="colA" headerText="Column A:" width="40" 
      headerRenderer="path.customComponents.VerticalHeader" 
      itemRenderer="path.customComponents.CustomDataGridItemRenderer" /> 
    </mx:Columns> 
</mx:DataGrid> 

只有我不知道提前多少列會有。於是,我就在ActionScript功能搭建列:

private var _columns:Array; 

[Bindable] 
public function set columns(value:Array):void 
{ 
    var c:Array = []; 
    for each(var object:Object in value) 
    { 
     var column:DataGridColumn = new DataGridColumn(); 
     column.headerText=object.name; 
     column.width=40; 

     // Setting the Renderers like this doesn't work! 
     column.headerRenderer = 
       path.customComponents.VerticalHeader; 
     column.itemRenderer = 
       path.customComponents.CustomDataGridItemRenderer; 

     c.push(c); 
    } 
    myDataGrid.columns = c; 
} 
public function get columns():Array 
{ 
    return _columns; 
} 

但由於某些原因,該渲染不能設置像這樣。 (column.itemRenderer = com.ItemRenderer)。

什麼是動態設置這些渲染的正確方法?

回答

15

itemRendererheaderRenderer預計爲mx.core.IFactory作爲其值。在mxml中,您傳遞的字符串值會自動轉換爲mx.core.ClassFactory。在ActionScript中,你必須自己做。

column.itemRenderer 
      = new ClassFactory(path.customComponents.CustomDataGridItemRenderer); 
+0

太棒了!這也解決了我的問題!非常感謝! – Markus 2010-03-11 16:38:00

+0

哦,夥計,你明確地拯救了我的一天! :) – 2013-10-24 08:32:57

相關問題