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
Pour illustrer cela voici un code très simple qui reproduit le bug :
Si je démarre cette application je me retrouve avec 3 checkboxes dans ma datagrid :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
[ ] 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![]()
Partager