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