2010-05-17 14 views
0

J'essaie de comprendre comment gérer une grille de données basé sur un objet XML comme ceci:Peupler un Datagrid avec un nombre variable de colonnes et de lignes dans Flex

<matrix rows="5" columns="5"> 
<column> 
    <row>0.5</row> 
    <row>0.21</row> 
</column> 
<column> 
    <row>0.6</row> 
    <row>0.9</row> 
</column> 
<column> 
    <row>0.5</row> 
    <row>0.5</row> 
</column> 
<column> 
    <row>0.8</row> 
    <row>0.4</row> 
</column> 
</matrix> 

je devrai remplir les noms de colonnes Datagrid basé sur un objet XML différent et utiliser le code XML ci-dessus pour remplir chacune des lignes de la colonne. Je suis actuellement capable de créer le Datagrid et de remplir ses en-têtes de colonnes, mais je ne suis pas sûr de savoir comment ajouter les lignes pour chaque colonne. Le XML ci-dessus sera mis à jour avec de nouveaux éléments de ligne et de colonne ajoutés et supprimés. Ceci, bien sûr, sera lié au Datagrid pour afficher les mises à jour.

+0

Cela me semble une approche habituelle; comme vous essayez de créer la disposition d'un DataGrid en XML. Envoyez simplement le XML à vos données et laissez-le gérer la mise en page. – JeffryHouser

+0

Existe-t-il un moyen de définir le DataField pour un DataGridColumn en utilisant le même nom d'élément XML (comme dans l'exemple ci-dessus)? – Mino

Répondre

1

Est-il nécessairement vrai que les données de ligne sont enfant de la colonne? Vous devrez d'abord transformer les données si c'est le cas. DataGrid dans Flex et Table dans HTML sont basés sur la convention des bases de données avec des lignes comme des enregistrements individuels, pas des colonnes.

Si le fournisseur de données refuse de se conformer à cette règle, vous feriez mieux de manipuler les données en fonction du contrôle de la vue plutôt que vice versa, ce que vous semblez faire maintenant.

+0

Merci pour votre aide. Je suis d'accord avec toi. Je pensais peupler le DataGrid par colonnes et non par lignes. J'ai trouvé cet article qui m'a vraiment aidé: http://flexpearls.blogspot.com/2008/02/generating-dg-columns-for-xml-data.html Merci. :) – Mino

1

Les lignes d'une grille de données seront dynamiques. Il sera renseigné en fonction du nombre d'éléments dans le fournisseur de données. Mais pour rendre les colonnes dynamiques, vous devez le faire en utilisant AS.

Datagrid a une propriété appelée "colonnes". Cela contient les objets DataGridColumn pour cette grille de données. Vous pouvez vérifier le fournisseur de données et ajouter ou supprimer DatagridColumns au tableau "columns".

var cols:Array = []; 
for(var i:int = 0;i<dataProvider.length;i++) 
{ 
    var DGCol:DataGridColumn = new DataGridColumn(); 
    DGCol.dataField = "data1"; 
    cols.push(DGCol); 
} 
myDg.columns = cols;