DataGrid CheckBox Itemerenderer看起来像一个bug ......就像一个bug

时间:2010-03-02 14:32:18

标签: flex

我有一个DataGrid连接到后端,一个字段/列作为STATUS。 DG使用CheckBox HeaderRenderer和itemRenderer。当STATUS“失败”时,我想显示复选框,当它是其他任何东西时,不显示它(或者,作为妥协,禁用它)。可见属性没有任何效果(我不知道为什么),因为复选框总是显示,而enabled = false只是将其灰显但仍然允许headerRenderer检查&取消选中(再次,不知道为什么)。知道为什么会这样吗???代码很简单:

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 个答案:

答案 0 :(得分:1)

visible属性不起作用,因为数据网格本身在添加或删除它们时使其渲染器可见且不可见。如果要隐藏复选框,则必须在隐藏数据网格时将其更改为其他内容,或将HeaderRenderer更改为容器(VBox或其他),包含复选框。然后,您可以设置复选框的visible属性,该属性与标题渲染器的visible属性不同。

对于复选框甚至在您设置enabled=false时工作,这可能是因为您覆盖了clickHandler。当点击它时,显然仍然会调用它,这是有道理的(这不是因为组件被禁用,点击不再发生)。您应该以另一种方式捕捉复选框。例如,在change事件上添加事件侦听器。