2009-11-27 5 views
4

Je cette DataGrid du DataGridColumn:Set ItemRenderer dynamiquement

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

Seulement je ne sais pas à l'avance combien de colonnes il y aura. J'ai donc essayé construire les colonnes avec une fonction dans 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; 
} 

Mais pour une raison quelconque, le Renders ne peut pas être mis comme ça. (column.itemRenderer = com.ItemRenderer).

Quelle est la bonne façon de définir ces rendus dynamiquement?

Répondre

15

itemRenderer et headerRenderer attend une mx.core.IFactory comme sa valeur. En mxml, la valeur de chaîne que vous transmettez est automatiquement convertie en mx.core.ClassFactory. En ActionScript, vous devez le faire vous-même.

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

Parfait! Cela a résolu ma question aussi! Merci beaucoup! – Markus

+0

Oh, mec, vous avez définitivement sauvé ma journée! :) –

Questions connexes