我有一个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>
答案 0 :(得分:1)
visible
属性不起作用,因为数据网格本身在添加或删除它们时使其渲染器可见且不可见。如果要隐藏复选框,则必须在隐藏数据网格时将其更改为其他内容,或将HeaderRenderer
更改为容器(VBox
或其他),包含复选框。然后,您可以设置复选框的visible
属性,该属性与标题渲染器的visible
属性不同。
对于复选框甚至在您设置enabled=false
时工作,这可能是因为您覆盖了clickHandler
。当点击它时,显然仍然会调用它,这是有道理的(这不是因为组件被禁用,点击不再发生)。您应该以另一种方式捕捉复选框。例如,在change
事件上添加事件侦听器。