2009-08-19 8 views
2

Je tire des données XML pour déterminer les colonnes visibles et les largeurs de chaque colonne. La largeur de ma grille de données peut changer d'un côté d'une HDividedBox. La partie de visibilité fonctionne, mais la définition de la largeur provoque des maux de tête. Heres le code:Largeur de colonne Flex 3 DataGrid Problème

for(loop through column data retrieve from XML) 
{ 
    newData[i] = dg.columns[Number(columnsOrder[i]) - 1]; 
    newData[i].visible = (Number(columnsVisibility[i]) == 1); 
    newData[i].width = Number(columnsWidth[i]); 
    trace(newData[i].headerText + " w:" + newData[i].width.toString() + " v:" + newData[i].visible.toString()); 
} 
dg.columns = newData; 
dg.invalidateList(); 

Dans la trace la largeur est correcte pour les deux premiers éléments, cependant, sa projection en tant que « 20 » pour une jamais consécutive ...

Date w:240 v:true 
Title w:184 v:true 
Requestor w:20 v:true 
Approved By w:20 v:true 
Category w:20 v:false 
Status w:20 v:false 
Priority w:20 v:false 

Quand je sortie Number (columnsWidth [i]) apparaît comme la valeur correcte, donc quelque chose de bizarre se passe dans l'attribution de la largeur.

En regardant cela pendant quelques heures maintenant, et j'ai essayé plusieurs choses pour essayer de résoudre le problème en vain.

Répondre

3

largeur de mon DataGrid peut changer son sinces d'un côté d'un HDividedBox.

C'est le problème ici.

J'ai été confronté exactement au même problème avec Flex 2 et Flex 3 DataGridColumn largeur chaque fois que la largeur pour le DataGrid n'a pas été fixée. La seule solution que j'avais était de fixer la largeur du DataGrid ou passer à AdvancedDataGrid ou d'autres composants similaires.

+0

Je pense que ce bug se produit si la taille de la grille de données est trop faible pour calculer les colonnes lors de sa création. Un travail autour est de définir la largeur à quelque chose qui va accueillir toutes les colonnes comme 100, puis dans l'événement de création complète définir la largeur à ce que vous voulez vraiment, comme percentWidth = 100 – robmcm

1

J'ai fait la même chose dans AdvancedDataGrid et cela fonctionne. Essayez en définissant ces valeurs

horizontalScrollPolicy="on" 
    width="100% 

puis vous ajoutez des colonnes cela devrait fonctionner avec HDividedBox.

1

Vous pouvez accomplir ceci, c'est ce que je crois être un bogue dans le DataGrid lui-même.

Si vous définissez minWidth = "0" et horizontalScrollPolicy = "{ScrollPolicy.AUTO}" sur le DataGrid, vous pouvez ensuite créer des objets DataGridColumn avec des largeurs fixes et doivent être correctement respectés.

Toutefois, il semble toujours exister un problème avec la dernière colonne, lorsque le DataGrid est toujours plus grand que la somme de toutes les largeurs fixes, il étend le DataGridColumn final.

Vous pouvez contourner ce problème en ajoutant une colonne vide à la fin sans texte d'en-tête, etc.

1

Ok - nous avons rencontré nous-mêmes tout en renforçant le soutien de divers modes de largeur de colonne. Juste un peu friandise de l'information - si vous souhaitez définir la largeur explicitement, assurez-vous de faire quelque chose comme ceci:

var oldPolicy:String = grid.horizontalScrollPolicy; 
grid.horizontalScrollPolicy ="on" 
//set your widths here 
grid.horizontalScrollPolicy =oldPolicy; 
Questions connexes