在运行时从 spark 创建 mx dataGrid itemRenderer
Posted
技术标签:
【中文标题】在运行时从 spark 创建 mx dataGrid itemRenderer【英文标题】:create mx dataGrid itemRenderer from spark at runtime 【发布时间】:2012-10-12 21:31:05 【问题描述】:如何在运行时通过复制 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?
【问题讨论】:
【参考方案1】:有谁知道如何挖出组件/功能/属性 在火花 itemRenderer 中?如何将其“类型转换”到 mx 项目渲染器?
即使通过反思可以实现,我认为这将是一项非常艰巨的任务。
如果我有这样的要求,我会考虑两种选择。
首先是通过扩展UIComponent
并实现接口为每个列创建itemRenderers,以便Spark Grid
和Mx Grid
可以使用它们。然后你就可以取消标记remarked line了。
二是扩展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);
【讨论】:
以上是关于在运行时从 spark 创建 mx dataGrid itemRenderer的主要内容,如果未能解决你的问题,请参考以下文章
如何使用mx Prints DataGrid打印flex spark datagrid?或者是否有其他方法可以在不使用mx Prints DataGrid的情况下实现此目的?
在 Flash Builder 的“actionscript 项目”中使用 mx 组件