2010-03-02 84 views
0

我有一個DataGrid連接到後端,一個字段/列作爲狀態。 DG使用CheckBox HeaderRenderer和itemRenderer。當狀態爲「失敗」時,我想顯示覆選框以及什麼時候是其他任何東西,而不是顯示它(或者作爲折中,禁用它)。可見的屬性沒有任何影響(我不知道爲什麼),因爲複選框總是顯示,並且enabled = false只是灰色,但仍允許headerRenderer檢查&取消選中(再次,不知道爲什麼)。任何想法爲什麼發生這種情況?代碼非常簡單:DataGrid CheckBox Itemerenderer看起來像一個bug ...像一個bug的行爲

的itemRenderer -

<?xml version="1.0" encoding="utf-8"?> 
<mx:CheckBox xmlns:mx="http://www.adobe.com/2006/mxml"> 

<mx:Script> 
<![CDATA[ 
    import com.fidelity.ORWS.view.requests.RequestStatus; 
    import mx.controls.Alert; 

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

    if(data.status == 'SUCCESS' || data.status == 'PROCESSING') 
     { this.enabled = false; }   
    } 
]]> 
</mx:Script> 
</mx:CheckBox> 

的HeaderRenderer -

<?xml version="1.0" encoding="utf-8"?> 
<mx:CheckBox xmlns:mx="http://www.adobe.com/2006/mxml"> 
<mx:Script> 
<![CDATA[ 
    import mx.collections.ArrayCollection; 
    import mx.controls.DataGrid; 

    override protected function clickHandler(event:MouseEvent):void 
    { 
    super.clickHandler(event); 

    var dg:DataGrid = this.owner as DataGrid; 
    var dp:ArrayCollection = dg.dataProvider as ArrayCollection; 
    var cb:requestcheckboxRenderer; 

    for (var i:int=0;i<dp.source.length;i++) 
    { 
    cb = dg.indexToItemRenderer(i) as requestcheckboxRenderer; 
    cb.selected = (selected) ? true : false; 
    } 
    } 
]]> 
</mx:Script> 
</mx:CheckBox> 

回答

1

visible屬性將無法工作,因爲在DataGrid本身使得其渲染可見,當它增加了無形的或刪除他們。如果你想隱藏複選框,你可以在隱藏數據網格的時候更改數據網格的headerrenderer,或者將你的HeaderRenderer更改爲包含複選框的容器(VBox或其他)。然後,您可以設置複選框的visible屬性,該屬性將與標題呈示器的visible屬性不同。

對於設置爲enabled=false的複選框甚至可以工作,這可能是因爲您重寫了clickHandler。那個被點擊時顯然仍然被調用,這是有道理的(這不是因爲組件被禁用,點擊不再發生)。您應該以另一種方式捕獲複選框的更改。例如,在change事件中添加事件偵聽器。

+0

謝謝 - 最後確實得到它的工作。基本上將複選框包裝在容器中,該容器允許複選框上的ID並且能夠隱藏/顯示。無論如何,這是首選的解決方案,所以啓用/禁用不再是一個問題。 再次感謝... – dude22 2010-03-02 18:47:13

相關問題