我有一个包含船舶对象的网格表(数据提供者接受船舶对象的数组集合),并在网格表中仅显示船舶名称和日期。我的船对象有一个名为 checkList 的布尔值属性,用作我的复选框项目渲染器中的数据绑定。(使复选框,勾选和取消勾选)
当我将 Image 对象添加到容器中时,我想检查我的复选框。被添加到容器中的 Image 对象有一个 id。我想将该图像 ID 与数据网格表中的 shipId 匹配,并选中该特定记录的复选框。
所以我的 Image 对象会监听 add 事件,所以当 Image 对象被添加到容器时。它调用 addHandler() 函数获取图像的 id,并通过数据网格表循环查找匹配的 id 并检查 CheckBox。我的循环工作得很好。使用 Alert.show() 我可以看到它与 id 匹配并将布尔值设置为 true,以便勾选复选框。但是该复选框未勾选。
这些是我的代码。即使该特定记录的 checkList 属性设置为 true。复选框未勾选。我不知道问题是什么。我是一名学生,刚接触 flex。有人可以帮帮我吗?
我的 MXML 视图:我的网格表
<s:DataGrid id="arrivalTable" x="-1" y="-1" width="302" height="205" requestedRowCount="4"
dataProvider="{myArrivalShips}" >
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="shipName" headerText="Arrival Ships" itemRenderer="DesignItemRenderer.myCustomToolTipRenderer" width="130" ></s:GridColumn>
<s:GridColumn dataField="ETA" headerText="ETD" itemRenderer="DesignItemRenderer.myCheckBoxRenderer"></s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
我的 Image 对象侦听添加事件。
displayImg.addEventListener(FlexEvent.ADD,addHandler);
这是我的 addHandler() 事件函数:
protected function addHandler(event:FlexEvent):void
{
var ImageShipId:String = Image(event.currentTarget).id;
var destination:BorderContainer = Image(event.currentTarget).owner as BorderContainer;
var destinationId:String = destination.id;
if( destinationId == "bct_HoldingArea" ){
for(var j:int = 0; j<arrivalTable.dataProvider.length; j++){
var myShip:Ship = arrivalTable.dataProvider.getItemAt(j) as Ship;
var myShipId:String = myShip.shipID.toString();
if(StringUtil.trim(myShipId) == StringUtil.trim(ImageShipId)){
myShip.checkList = true;
Alert.show("The ship name : " + myShip.shipName +"\n" + "The Ship selected : " + myShip.checkList);
}
}
}
}
我的复选框项目渲染器:
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
<s:HGroup>
<s:Label text="{data.ETD}" paddingTop="8"/>
<s:CheckBox id="myCheckBox" enabled="false" selected="{data.checkList}" />
</s:HGroup>