Définir dynamiquement le ItemRenderer du dataGridColumn
-
05-07-2019 - |
Question
J'ai ce DataGrid:
<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é de 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, les rendus ne peuvent pas être définis comme ceci. (column.itemRenderer = com.ItemRenderer).
Quelle est la bonne façon de définir ces rendus de manière dynamique?
La solution
itemRenderer
et headerRenderer
attend un mx.core.IFactory
comme valeur. En mxml, la valeur de chaîne que vous transmettez est automatiquement convertie en mx.core.ClassFactory
. Dans ActionScript, vous devez le faire vous-même.
column.itemRenderer
= new ClassFactory(path.customComponents.CustomDataGridItemRenderer);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow