【问题标题】:Flex3 AdvancedDataGrid : how to add a new column based on existing one?Flex3 AdvancedDataGrid:如何在现有列的基础上添加新列?
【发布时间】: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 内容




    导入 mx.collections.ArrayCollection;
    进口 com.test.Purchase;
    [嵌入(source=".​​.\assets\coeur_rouge.png")]
    公共静态常量 ICON_FAVORITE:Class;
    [嵌入(source=".​​.\assets\coeur_gris.png")]
    公共静态常量 ICON_NEUTRAL:Class;
    [可绑定]
    public var myAC:ArrayCollection = new ArrayCollection();
    公共函数 init() :void {
    var aPurchase:Purchase=new Purchase();
    var anotherPurchase:Purchase= new Purchase();
    aPurchase.id=120;
    aPurchase.category="category1";
    aPurchase.name="优势 2";
    aPurchase.isPreferred=true;
    myAC.addItem(aPurchase);
    anotherPurchase.id=220;
    anotherPurchase.category="category2";
    anotherPurchase.name="Nintendo DS";
    anotherPurchase.isPreferred=false;
    myAC.addItem(anotherPurchase);}
    ]]>
    脚本>







    应用>

    • 动作脚本中的数据对象 公开课购买 { 公共函数购买(){

      }

      私有变量 _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; } }

【问题讨论】:

    标签: apache-flex advanceddatagrid


    【解决方案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> &ltl;/mx:AdvancedDataGridColumn>
    • -1120:访问未定义的属性 ICON_NEUTRAL。 -1120:访问未定义的属性 ICON_FAVORITE。
    • Gerhard,除了这个可见性问题(看起来变量在 mx:itemrenderer 和 mx:component 中不可见)一切正常。我只是把字符串常量。感谢您的帮助。
    猜你喜欢
    • 2015-07-06
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2021-04-19
    相关资源
    最近更新 更多