Bonjour,

Je cherche à créer dynamiquement des DataDrid en fonction d'une source de données (pour l'instant XML), et j'ai une erreur à l'utilisation (voir à la fin de ce post).
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
 
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   contentCreationComplete="init()">
 
	<fx:Declarations>
		<fx:XML id="xmlData" source="xml/xmlData.xml"/>
		<s:ArrayList id="columns">
			<s:GridColumn dataField="@nom" editable="true"/>
		</s:ArrayList>
	</fx:Declarations>
 
	<fx:Script>
		<![CDATA[
			import mx.collections.XMLListCollection;
			import spark.components.DataGrid;
 
			private function init():void {
				var elt:XMLList = xmlData.element.(@nom == "Test1");
				// Pour tous les regroupements
				for each(var grp:XML in elt.regroupements.regroupement) {				
					// Ajoute d'une dataGrid au panel (contenant les items du groupe)
					var dataGrid:DataGrid = new DataGrid();
					dataGrid.dataProvider=new XMLListCollection(grp.item);
					dataGrid.columns=columns;
					dataGrid.editable=true;
					panel.addElement(dataGrid);
				}
			}
		]]>
	</fx:Script>
 
 
	<s:Panel id="panel">
		<s:layout>
			<s:TileLayout requestedColumnCount="3"/>
		</s:layout>
	</s:Panel>
</s:Application>
Voici le fichier XML:
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
45
46
47
48
49
50
51
52
<provider>
	<element nom="Test1">
		<regroupements>
			<regroupement nom="grp1">
				<item nom="Grp1Item1"/>
				<item nom="Grp1Item2"/>
				<item nom="Grp1Item3"/>
			</regroupement>
			<regroupement nom="grp2">
				<item nom="Grp2Item1"/>
				<item nom="Grp2Item2"/>
				<item nom="Grp2Item3"/>
				<item nom="Grp2Item4"/>
				<item nom="Grp2Item5"/>
			</regroupement>
			<regroupement nom="grp3">
				<item nom="Grp3Item1"/>
				<item nom="Grp3Item2"/>
				<item nom="Grp3Item3"/>
			</regroupement>
			<regroupement nom="grp4">
				<item nom="Grp4Item1"/>
				<item nom="Grp4Item2"/>
			</regroupement>
		</regroupements>
	</element>
	<element nom="Test2">
		<regroupements>
			<regroupement nom="grp1">
				<item nom="Grp1Item1"/>
				<item nom="Grp1Item2"/>
			</regroupement>
			<regroupement nom="grp2">
				<item nom="Grp2Item1"/>
				<item nom="Grp2Item2"/>
				<item nom="Grp2Item3"/>
				<item nom="Grp2Item4"/>
			</regroupement>
			<regroupement nom="grp3">
				<item nom="Grp3Item1"/>
				<item nom="Grp3Item2"/>
			</regroupement>
			<regroupement nom="grp4">
				<item nom="Grp4Item1"/>
				<item nom="Grp4Item2"/>
				<item nom="Grp4Item3"/>
				<item nom="Grp4Item4"/>
				<item nom="Grp4Item5"/>
			</regroupement>
		</regroupements>
	</element>
</provider>
Ici, à partir d'un fichier XML, je crée dynamiquement plusieurs dataGrid. Dans ce cas, 4 dataGrid.

Par contre, lorsque j'essaie d'éditer les deux premières lignes de n'importe quelle dataGrid, ça fonctionne, dès que j'essaie de modifier une ligne d'indice supérieure, J'ai une erreur:
TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at spark.components.gridClasses:efaultGridItemEditor/prepare()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\gridClasses\DefaultGridItemEditor.mxml:114]
at spark.components.gridClasses:ataGridEditor/http://www.adobe.com/2006/flex/mx/internal::createItemEditor()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\gridClasses\DataGridEditor.as:623]
at spark.components.gridClasses:ataGridEditor/setEditedItemPosition()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\gridClasses\DataGridEditor.as:286]
at spark.components.gridClasses:ataGridEditor/dataGrid_gridItemEditorSessionStartingHandler()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\gridClasses\DataGridEditor.as:1204]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:13128]
at spark.components.gridClasses:ataGridEditor/startItemEditorSession()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\gridClasses\DataGridEditor.as:798]
at spark.components:ataGrid/startItemEditorSession()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\DataGrid.as:3803]
at spark.components.gridClasses:ataGridEditor/grid_gridMouseUpHandler()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\gridClasses\DataGridEditor.as:1379]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:13128]
at spark.components::Grid/dispatchGridEvent()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\Grid.as:4038]
at spark.components::Grid/grid_mouseDownDragUpHandler()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\Grid.as:3883]
at Function/<anonymous>()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\utils\MouseEventUtil.as:96]
Tout ce comporte comme-ci une fois chargé, le data provider était celui de la dernière liste.

Donc, pour que cela fonctionne, il faut que le dernier dataGrid soit celui qui a le plus grand nombre de lignes. Ce qui n'est pas acceptable.

Je ne comprends pas, normalement chaque instance de datagrid doit avoir son propre dataprovider.

Avez-vous ne serait-ce qu'une piste?