سؤال

ولدي هذا 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>

وفقط أنا لا أعرف مقدما عدد الأعمدة سيكون هناك. لذلك حاولت بناء الأعمدة مع وظيفة في أكشن:

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

ما هي الطريقة الصحيحة لتعيين هذه يجعل حيوي؟

هل كانت مفيدة؟

المحلول

وitemRenderer وheaderRenderer تتوقع mx.core.IFactory كقيمة لها. في MXML، يتم تحويل قيمة السلسلة التي تمرر تلقائيا إلى mx.core.ClassFactory. في أكشن، عليك أن تفعل ذلك بنفسك.

column.itemRenderer 
            = new ClassFactory(path.customComponents.CustomDataGridItemRenderer);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top