Flex3 AdvancedDataGrid:如何在现有列的基础上添加新列?
Posted
技术标签:
【中文标题】Flex3 AdvancedDataGrid:如何在现有列的基础上添加新列?【英文标题】:Flex3 AdvancedDataGrid : how to add a new column based on existing one? 【发布时间】:2011-07-30 12:41:09 【问题描述】:我在 flex3 (Flex 3) 中有一个 AdvancedDataGrid,有 4 列:
id : 整数 类别:字符串 名称:字符串 isPreferred : 布尔值我想添加第五列
最喜欢的:图片
favourite 的值将基于 isPreferred 的值:如果为 true,则 favorite 将是一个 read-heart-icon,如果为 false,一个 gray-heart-icon。 感谢您的帮助。
下面是我的代码:
mxml 内容
动作脚本中的数据对象 公开课购买 公共函数购买()
私有变量 _id:int = -1; 私有变量 _category:String = null; 私有 var _productName:String = null; 私有变量 _preferred:Boolean=false;
公共函数获取 id():int 返回_id;
公共函数集 id(pId:int):void _id = pId;
公共函数获取类别():字符串 返回_类别;
公共函数集类别(pCategory:String):void _category = pCategory;
if ((_category == null) || (_category == ""))
_category = "Default Category";
公共函数获取名称():字符串 返回_产品名称;
公共函数集名称(pName:String):void _productName = pName;
if ((_productName == null) || (_productName == ""))
_productName = "default product name";
category = _productName;
公共函数获取 isPreferred() : Boolean 返回_首选;
公共函数集 isPreferred(pPreferred:Boolean) :void _preferred=pPreferred;
【问题讨论】:
【参考方案1】:为此,您需要itemRenderer
。这样的事情应该可以工作:
<mx:AdvancedDataGridColumn headerText="favorite">
<mx:itemRenderer>
<mx:Component>
<mx:Image source="data.isPreferred ? ICON_FAVORITE : ICON_NEUTRAL">
<mx:Script>
<![CDATA[
[Embed(source="..\assets\coeur_rouge.png")]
public static const ICON_FAVORITE:Class;
[Embed(source="..\assets\coeur_gris.png")]
public static const ICON_NEUTRAL:Class;
]]>
</mx:Script>
</mx:Image>
</mx:Component>
</mx:itemRenderer>
</mx:AdvancedDataGridColumn>
请记住,这段代码不可重用。如果您需要使用大量显示图像的列,我建议您实现自定义ImageColumn
,它扩展mx:AdvancedDataGridColumn
,具有某种imageFunction
作为属性并使用自定义itemRenderer
,它将使用列的imageFunction
显示适当的图像。
【讨论】:
格哈德你说得对:我想说明我的问题。您能否建议一个更简单的替代方案(比扩展 AdvancedDataGridColumn),因为我是 flex3 的新手。你会怎么做? simple 解决方案是我在上面的代码 sn-p 中发布的解决方案。它使用Image
作为itemRenderer
,其中source
根据data.isPreferred
的值而变化。我还概述了如何实现ImageColumn
。我会为该列实现一个imageFunction
(比如它的labelFunction
)。自定义渲染器可以通过其listData
访问该列。自己试试。当您了解列和渲染器的工作原理时,这并不复杂。如果您想创建这样的ImageColumn
并有具体问题,请发布另一个问题。
我测试了建议的解决方案,但这不是编译 <mx:AdvancedDataGridColumn headerText="favorite"> <mx:itemRenderer> <mx:组件> <mx:Image source="data.isPreferred ? ICON_FAVORITE : ICON_NEUTRAL"/> </mx:组件> </mx:itemRenderer> <l;/mx:AdvancedDataGridColumn>
-1120:访问未定义的属性 ICON_NEUTRAL。 -1120:访问未定义的属性 ICON_FAVORITE。
Gerhard,除了这个可见性问题(看起来变量在 mx:itemrenderer 和 mx:component 中不可见)一切正常。我只是把字符串常量。感谢您的帮助。以上是关于Flex3 AdvancedDataGrid:如何在现有列的基础上添加新列?的主要内容,如果未能解决你的问题,请参考以下文章
在 flex3 中调整 TabNavigator 中的内容大小