2009-08-17 14 views
2

Dans mon application Flex, je stocke les largeurs et la visibilité des colonnes dans un fichier xml. Lorsque les charges d'application lit à partir du fichier xml et définit il colonnes des valeurs selon le cas:Flex DataGrid Largeur de colonne

for(i = 0; i < columnsOrder.length; i++){ 
    newOrder[i] = myDG.columns[Number(columnsOrder[i]) - 1]; 
    newOrder[i].visible = (Number(columnsVisiblity[i]) == 1); 
    newOrder[i].width = Number(columnsWidth[i]); 
} 
myDG.columns = newOrder; 
myDG.invalidateList(); 

Le problème semble réglage de la visibilité (il définit le champ visible correctement mais salit la largeur) ... I J'ai essayé de le régler après avoir réglé la largeur (en dehors de la boucle) et avant la boucle aussi. Il redimensionne correctement les colonnes si je ne fais rien avec la visibilité.

Des idées?

Répondre

6

Ajouter une déclaration d'importation en haut de votre fichier de classe:

importation mx.core.mx_internal;

Retirez ensuite en utilisant l'espace de noms mx_internal, retirez le propriétaire de la colonne, changer la largeur et reasign parent:

public static function resizeColumn(col:DataGridColumn, size:int):void 
    { 
     var owner:* = col.mx_internal::owner 
     col.mx_internal::owner = null; 

     col.width = size; 

     col.mx_internal::owner = owner; 
    } 

Cela devrait faire l'affaire (bien, il l'a fait pour nous après quelques des jours de prestation de serment)

+0

Tout d'abord, merci pour l'aide précieuse .. Mais par cette solution je suis capable de résoudre le problème quand je crée une grille de données à la première fois, mais quand je redimensionne des colonnes, la dernière colonne prend une largeur supplémentaire, même avait appelé cette fonction après l'événement "columnStretch" de datagrid. Pls m'aider ... –

3

Est-ce que horizontalScrollPolicy est défini sur false sur la grille de données? "Si la propriété horizontalScrollPolicy de DataGrid est définie sur false, toutes les colonnes visibles doivent entrer dans la zone affichable et le DataGrid n'honore pas toujours la largeur des colonnes si la largeur totale des colonnes est trop petite ou trop grande pour le zone affichable. "

http://livedocs.adobe.com/flex/3/langref/mx/controls/dataGridClasses/DataGridColumn.html#width

0

j'ai pu le faire fonctionner en appelant la boucle ci-dessus en fonction deux fois ... la première fois ajouter les colonnes visibles, la deuxième fois, il fixe la largeur correcte. Pas la meilleure solution mais je ne peux pas y passer plus de temps.

+0

Vous auriez dû écrire ceci comme un commentaire à la réponse ou édité votre question. Pas comme une réponse réelle. Je vois que votre réputation est assez élevée, donc vous le savez probablement déjà, mais je pensais que je le mentionnerais de toute façon. Au moins d'autres le sauront aussi. –