Установите ItemRenderer объекта dataGridColumn динамически - PullRequest
4 голосов
/ 27 ноября 2009

У меня есть эта 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>

Только я не знаю заранее, сколько будет столбцов. Поэтому я попытался построить столбцы с помощью функции в 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).

Как правильно установить эти рендеры динамически?

1 Ответ

15 голосов
/ 27 ноября 2009

itemRenderer и headerRenderer ожидают mx.core.IFactory в качестве значения. В mxml передаваемое вами строковое значение автоматически преобразуется в mx.core.ClassFactory. В ActionScript вы должны сделать это самостоятельно.

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