2

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

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

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

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

这样做,打印保留 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);

}

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

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

有谁知道如何在 spark itemRenderer 中挖出组件/功能/属性?如何将其“类型转换”到 mx itemRenderer?

4

1 回答 1

0

有谁知道如何在 spark itemRenderer 中挖出组件/功能/属性?如何将其“类型转换”到 mx itemRenderer?

即使通过反思可以实现,我认为这将是一项非常艰巨的任务。

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

首先是通过扩展和实现接口为每个列创建 itemRenderers,以便UIComponent可以使用它们。然后您将能够取消标记已标记的行。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);
于 2013-08-03T23:10:04.957 回答