0

我正在使用嵌入数据网格列中的项目渲染器将图像添加到datagrid的单元格。只有当来自单元格行的数据满足特定要求时,才需要将图像添加到单元格。类似下面就是我想实现:有条件地使用as3中的项目渲染器将图像添加到datagrid中

<mx:AdvancedDataGridColumn dataField="delete" headerText="Delete" > 
     <mx:itemRenderer> 
      <mx:Component> 
       <mx:VBox horizontalAlign="center" verticalAlign="middle"> 
        <mx:Script> 
         <![CDATA[          
          public function showImage():void{ 
           if(rowData.column1 == "image1"){ 
            image1.visible = true; 
           } 
           else{ 
            image1.visible = false; 
           } 
         ]]> 
        </mx:Script> 
        <mx:Image source="{image1}" visible="{showImage}" id="deleteFile" click="" scaleX="0.1" scaleY="0.1" horizontalCenter="true" horizontalAlign="center"/>          
       </mx:VBox> 
      </mx:Component> 
     </mx:itemRenderer> 
      </mx:AdvancedDataGridColumn> 
+0

似乎没有成为一个问题在这里 – CyanAngel

+0

我该怎么办呢?条件语句是好的,但我怎么能适当地调用这个图像将只显示如果语句被满足。 – kris

+0

在项目渲染器代码中重写'public function set data()'在 – CyanAngel

回答

1

下面的代码添加到<mx:Script>

override public function set data(value:Object):void 
{ 
    super.data = value; 
    showImage(); 
} 

set data是,grid呼吁不要设置功能,这是最好的功能覆盖以将条件属性应用于ItemRenderer

+0

它这种情况下,它的工作原理,但计算这种事情的最佳场所不是设置数据,但commitProperties –

+0

你可能是正确的,我刚刚去掉了Adobe文档,似乎鼓励设置数据 – CyanAngel

0

CyanAngel对于覆盖的评论是正确的set data

更新 CityAngle只是添加了相同的答案,因为我,但他们键入您已经把在DataGrid中dataProvider在这里我要离开这个给后人:-)

override public function set data(value:Object):void 
{ 
    super.data = value; 

    if(value.column1 == "image1"){ 
      image1.visible = true; 
    } 
    else{ 
      image1.visible = false; 
    } 

} 

data将是一个对象。

1

检查了这一点

<mx:AdvancedDataGridColumn dataField="delete" headerText="Delete" > 
    <mx:itemRenderer> 
     <mx:Component> 
      <mx:VBox horizontalAlign="center" verticalAlign="middle"> 
       <mx:Image source="{image1}" visible="{data.image1 == 'image1'}" id="deleteFile" click="" scaleX="0.1" scaleY="0.1" horizontalCenter="true" horizontalAlign="center"/>          
      </mx:VBox> 
     </mx:Component> 
    </mx:itemRenderer> 
</mx:AdvancedDataGridColumn> 

但是我鼓励你建立一个单独的类,并将其设置为项渲染列。 获得类似计算器的问题更多的细节:

How can I know when a Button in a Flex DataGrid itemRenderer is clicked?

Flex 4 - DataGrid with Button in cells

+0

不具有约束风险,因为dataProvider可以将数据设置为null? – CyanAngel

+0

@CyanAngel如果dataProvider为null,那么网格内没有行。所以不需要调用任何渲染器。请尝试一下示例并说服自己没有运行时错误。 –

+0

公平,与无类型对象上的属性相同的问题。但你已经通过提出自定义类来解决这个问题,我完全同意 – CyanAngel