2010-03-02 71 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

相关问题