在运行时从spark创建mx dataGrid itemRenderer

时间:2012-10-23 00:58:08

标签: flex flex-spark

如何在运行时复制sparkColumn.itemRenderer来设置mxColumn.itemRenderer?

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

我们正在使用mx:PrintDataGrid和mx:PrintAdvancedDataGrid实现“打印”功能。

我们将可打印的dataGrid列设置为我们要打印的dataGrid的列,如下所示:
printDataGrid.columns = targetDataGrid.columns; //或
printAdvancedDataGrid.columns = targetDataGrid.columns;

这样做,print保留了itemRenderers的格式。

当dataGrid-to-print是spark时,会迭代列,并生成新的spark列

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

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

dataField和headerText属性很容易从mx转换为spark列,但itemRenderers比较棘手。

如何将mxColumn.itemRenderer设置为sparkColumn.itemRenderer?

有谁知道如何挖掘spark itemRenderer中的组件/功能/属性?如何“输入”到mx itemRenderer?

1 个答案:

答案 0 :(得分:0)

  

有谁知道如何挖掘组件/功能/属性   在spark itemRenderer?如何“输入”到mx   的itemRenderer?

即使有可能反思,我认为这将是一项非常艰巨的任务。

如果我有这样的要求,我会考虑两种选择。

首先,通过扩展UIComponent并实现接口为每列创建itemRenderer,以便Spark GridMx Grid可以使用它们。然后你就可以取消标记标记的行了。

其次是扩展spark列并添加字段“type”,例如:“Label”,“Date”,“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);