Vous ne pouvez pas donner à la case un identifiant comme vous l'avez fait et vous attendre à ce qu'il se comporte comme un seul composant. Lorsque vous cochez la case en tant que rendu d'élément pour une colonne, vous ne parlez pas d'une seule case. Vous aurez affaire à autant de cases à cocher que de lignes dans la grille de données. L'exemple suivant vous montre comment déterminer si la case à cocher dans une ligne particulière est sélectionnée ou non
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
private var ac:ArrayCollection=new ArrayCollection([
{name: "John", test: true},
{name: "Joe", test: false}]);
private function init() {
dg.dataProvider=ac;
}
public function check():void {
var obj:Object=dg.selectedItem;
Alert.show("Checkbox=" + obj.test);
}
]]>
</mx:Script>
<mx:DataGrid id="dg"
dataProvider="{ac}"
click="check()">
<mx:columns>
<mx:DataGridColumn dataField="name">
</mx:DataGridColumn>
<mx:DataGridColumn>
<mx:itemRenderer>
<mx:Component>
<mx:CheckBox label="Test"
selected="{data.test}"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
</mx:Application>
flex semble parfois avoir du mal à mettre à jour le fournisseur de données pour la grille de données lorsque vous avez un itemRenderer imbriqué. Vous pouvez définir explicitement la propriété appropriée de la ligne dataProvider lorsque l'événement change se produit dans la case à cocher comme ci-dessous;
<mx:itemRenderer>
<mx:Component>
<mx:CheckBox label="Test" selected="{data.test}"
change="data.test=selected"/>
</mx:Component>
</mx:itemRenderer>
A travaillé super! Sur la deuxième partie, obtenait une erreur avec change = "data.test = selected", a dû le changer pour changer = "data.test =! Data.test" – Edyn