Bug DataGrid avec ItemRenderer
Bonjour,
j'ai une DataGrid dont le dataProvider est une collection d'objets.
Cette DataGrid possède une colonne affichant une checkbox (via un itemRenderer) pour chaque éléments.
Si je coche des checkbox et que je mets ensuite à jour ma collection d'objets, les checkbox cochées ne restent pas à leur place 8O
Pour illustrer cela voici un code très simple qui reproduit le bug :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var collection:ArrayCollection
public function onCreationComplete():void {
collection = new ArrayCollection();
collection.addItem(new Object().name = "AAA");
collection.addItem(new Object().name = "BBB");
collection.addItem(new Object().name = "CCC");
}
public function updateProvider():void {
collection = new ArrayCollection();
collection.addItem(new Object().name = "DDD");
collection.addItem(new Object().name = "EEE");
collection.addItem(new Object().name = "FFF");
}
]]>
</mx:Script>
<mx:DataGrid dataProvider="{collection}">
<mx:columns>
<mx:DataGridColumn>
<mx:itemRenderer>
<mx:Component>
<mx:CheckBox label="{data.name}"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
<mx:Button label="Update provider" click="updateProvider()" />
</mx:Application> |
Si je démarre cette application je me retrouve avec 3 checkboxes dans ma datagrid :
[ ] AAA
[ ] BBB
[ ] CCC
Je coche par exemple ensuite la 1ere et la 2e checkbox:
[x] AAA
[x] BBB
[ ] CCC
J'appuie ensuite sur le bouton "Update Provider" et je me retrouve avec :
[ ] DDD
[x] EEE
[x] FFF
alors que je devrais plutôt me retrouver avec :
[x] DDD
[x] EEE
[ ] FFF
Quelqu'un aurait une explication à cette étrange phénomène et une manière de le résoudre?
Note : Ca bug également si j'utilise des RadioButtons.
Merci d'avance ;)
CheckBox dans un DataGrid
Tu as tout simplement oublié de définir la propriété selected du checkbox.
Voici ton code corrigé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var collection:ArrayCollection
public function onCreationComplete():void {
collection = new ArrayCollection();
var obj:Object = new Object();
obj.name = "AAA";
obj.checked = false;
collection.addItem(obj);
var obj:Object = new Object();
obj.name = "BBB";
obj.checked = false;
collection.addItem(obj);
var obj:Object = new Object();
obj.name = "CCC";
obj.checked = false;
collection.addItem(obj);
}
public function updateProvider():void {
collection = new ArrayCollection();
var obj:Object = new Object();
obj.name = "DDD";
obj.checked = false;
collection.addItem(obj);
var obj:Object = new Object();
obj.name = "EEE";
obj.checked = false;
collection.addItem(obj);
var obj:Object = new Object();
obj.name = "FFF";
obj.checked = false;
collection.addItem(obj);
}
]]>
</mx:Script>
<mx:DataGrid dataProvider="{collection}">
<mx:columns>
<mx:DataGridColumn>
<mx:itemRenderer>
<mx:Component>
<mx:CheckBox label="{data.name}" selected="{data.checked}" />
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
<mx:Button label="Update provider" click="updateProvider()" />
</mx:Application> |