2012-10-23 29 views
2

如何通過在運行時複製sparkColumn.itemRenderer來設置mxColumn.itemRenderer?在運行時從spark創建mx dataGrid itemRenderer

我有一個使用mx:DataGrid,mx:AdvancedDataGrid和s:DataGrid的應用程序。

我們正在使用mx:PrintDataGrid和mx:PrintAdvancedDataGrid實現「打印」功能。

我們將可打印的dataGrid的列設置爲我們要打印的dataGrid的列,如下所示:
printDataGrid.columns = targetDataGrid.columns; //或
printAdvancedDataGrid.columns = targetDataGrid.columns;

這樣做,打印保留itemRenderer的格式。

在DataGrid到印刷的火花,列迭代,以及新的火花列所做

for (var i:uint; i < sparkColumns.length; i++)
{

sparkColumn = sparkColumns.getItemAt(i) as GridColumn;<br/> 
    mxColumn = new DataGridColumn();<br/> 
    mxColumn.headerText = sparkColumn.headerText;<br/> 
    mxColumn.dataField = sparkColumn.dataField;<br/> 
    //mxColumn.itemRenderer = sparkColumn.itemRenderer;<br/> 
    mxColumns.push(mxColumn); 

}

數據字段和headerText屬性從MX容易轉化爲火花列,但itemRenderer是棘手。

如何將mxColumn.itemRenderer設置爲sparkColumn.itemRenderer?

有誰知道如何挖掘出spark itemRenderer中的組件/函數/屬性?如何「輸入」到一個mx itemRenderer?

回答

0

有誰知道如何挖掘出spark itemRenderer中的組件/函數/屬性 ?如何「輸入」到mx itemRenderer?

即使有可能與反思,我認爲這將是非常艱難的任務。

如果我有這樣的要求,我會考慮兩種選擇。

首先是通過擴展UIComponent並實現接口以便Spark GridMx Grid可以使用它們來爲每列創建itemRenderer。然後,您將能夠取消標記的註釋行。

二是延長火花列,並添加域「type」,也將舉行,例如:「標籤」,「日期」,「CustomType」,「usdType」等

然後創建描述符,它將保存列的類型,mx渲染器的類和spark渲染器的類。

例如

var columnsDescripor:Object = {}; 
columnsDescripor["label"] = {mx: mx.controls.Label, s: spark.components.Label}; 
columnsDescripor["usd"] = {mx: MXusdRenderer, s: SusdRenderer}; 

然後,

sparkColumn = ExtendedGridColumn(sparkColumns.getItemAt(i)); 
mxColumn.itemRenderer = new (columnsDescripor[sparkColumn.type].mx);