0

J'ai rencontré un peu drôle et pensé qu'il affichait une valeur:Problème AdvancedDataGrid (Bug?) - Icônes de divulgation dans une colonne incorrecte. (Données hiérarchique, Flex 3.5)

J'utilise une grille de données avancée dans un cas où je dois régler la fournisseur de données à l'exécution en utilisant des données hiérarchiques. Les docs d'adobe ne couvrent pas vraiment ce genre de choses (du moins pas au niveau que je pourrais creuser).

Quelqu'un at-il déjà rencontré cela? La seule chose que j'ai pu trouver était un peu hackish et semble introduire un comportement étrange avec les icônes de divulgation de la grille avancée. J'ai inclus un test ci-dessous:

advancedDataGridProblem.as:

import mx.collections.ArrayCollection; 

public var dataProvider:ArrayCollection = new ArrayCollection([{label:"item1"}, 
      {label:"item2", children:[{label:"subItem1"},{label:"subItem2"}, 
      {label:"subItem3"}]}, 
      {label:"item3"}]); 

public function init():void{ 
     //using callLater to ensure that the grid has been created before setting DP 
     this.callLater(setDataProvider,[dataProvider]); 
} 

public function setDataProvider(list:ArrayCollection):void{ 
     heirData.source = list; 
} 

et MXML:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> 
    <mx:Script source="advancedDataGridProblem.as"/> 


    <mx:AdvancedDataGrid id="advDG" width="100%"> 

    <mx:columns> 
     <mx:AdvancedDataGridColumn headerText="What the heck?"/> 
     <mx:AdvancedDataGridColumn headerText="Label" dataField="label"/> 
     <mx:AdvancedDataGridColumn headerText="Column 2"/> 
     <mx:AdvancedDataGridColumn headerText="Column 3"/> 
    </mx:columns> 

    <mx:dataProvider> 
     <mx:HierarchicalData id="heirData"/> 
    </mx:dataProvider> 
</mx:AdvancedDataGrid> 

</mx:Application> 

Comme vous pouvez le voir lorsque vous exécutez l'application de test, les icônes qui doivent apparaissent dans la colonne Label sont effectivement placés dans le "What the Heck?" colonne. Si vous faites glisser la colonne Label et tentez de l'échanger avec le "What the Heck?" colonne, les icônes restent là où elles sont, mais miraculeusement, les étiquettes qui étaient précédemment alignées à gauche pour la colonne Label sont maintenant formatées correctement pour les icônes. Si vous faites glisser la colonne Etiquette hors de l'emplacement un, la grille redevient l'état d'origine.

Celui-ci est un peu au-dessus de ma tête - quelqu'un a des suggestions?

Idéalement, je voudrais contourner ce problème tous ensemble et affecter le dataProvider comme d'habitude au moment de l'exécution.

Merci d'avance!

Je vais déposer un rapport de bug avec Adobe à propos de celui-ci sous peu, et je vais jeter le lien dans un commentaire.

Répondre

0

Pour résoudre le problème de l'icône de divulgation mentionné ci-dessus, vous pouvez spécifier la propriété « TREECOLUMN » de AdvancedDataGrid, en passant l'ID de la colonne que vos données d'arbres devraient être.

l'autre jour Apparemment j'étais aveugle regardant les livesocs.

À la votre!

0

Eh bien ..

Après un week-end pour donner ma tête une bonne secousse et une paire d'yeux frais aujourd'hui, je l'ai trouvé une solution pour la partie « facile » de ma question.

Pour définir le DataProvider AdvancedDataGrid directement est beaucoup plus simple que je pensais initialement; vous avez juste besoin de lancer le ArrayCollection en tant que HierarchicalData. Pour être honnête, j'avais déjà essayé cela auparavant, mais je m'étais mal orthographié Hierarchical. facepalm.

Quoi qu'il en soit, advancedDataGridProblem.as devrait être remplacé:

import mx.collections.ArrayCollection; 
import mx.collections.HierarchicalData; 

public var dataProvider:ArrayCollection = new ArrayCollection([{label:"item1"}, 
                   {label:"item2", children:[{label:"subItem1"},{label:"subItem2"}, 
                   {label:"subItem3"}]}, 
                   {label:"item3"}]); 

public function init():void{ 
    //using callLater to ensure that the grid has been created before setting DP 
    this.callLater(setDataProvider,[dataProvider]); 
} 

public function setDataProvider(list:ArrayCollection):void{ 
    advDG.dataProvider = new HierarchicalData(list); 
} 

La déclaration du fournisseur de données dans le MXML peut également être retiré:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> 
<mx:Script source="advancedDataGridProblem.as"/> 


<mx:AdvancedDataGrid id="advDG" width="100%"> 

<mx:columns> 
    <mx:AdvancedDataGridColumn headerText="What the heck?"/> 
    <mx:AdvancedDataGridColumn headerText="Label" dataField="label"/> 
    <mx:AdvancedDataGridColumn headerText="Column 2"/> 
    <mx:AdvancedDataGridColumn headerText="Column 3"/> 
</mx:columns> 
</mx:AdvancedDataGrid> 

</mx:Application> 

L'exécution de ce code, vous pouvez toujours voir la icônes de divulgation dans la mauvaise colonne, mais au moins la solution «hackish» de la définition de dataProvider de la grille dans mxml est supprimée. Cela permet également une validation correcte et l'affichage de la grille. Le paramètre dataProvider de la grille permet une validation correcte de l'affichage, où la source hiérarchique dataProvider n'impose pas ces mêmes méthodes de validation, ce qui oblige l'utilisateur à redimensionner la grille ou le programmeur pour forcer la validation (ce qui n'a pas été possible). faire).

Je vous tiendrai au courant du problème d'icône de divulgation. En attendant, je m'attends à ce que verrouiller la première colonne et l'utiliser uniquement pour ces icônes fera très bien dans mon application. Je peux même transformer cette «faille» en une «caractéristique»: P

À votre santé!

[EDIT]

Une autre méthode qui permet la mise en œuvre encore plus facile et moins logique métier lors de l'utilisation des données est liée: ces

advancedDataGridProblem.as:

import mx.collections.ArrayCollection; 
import mx.collections.HierarchicalData; 

public var dataProvider:ArrayCollection = new ArrayCollection([{label:"item1"}, 
                   {label:"item2", children:[{label:"subItem1"},{label:"subItem2"}, 
                   {label:"subItem3"}]}, 
                   {label:"item3"}]); 

MXML:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
<mx:Script source="advancedDataGridProblem.as"/> 


<mx:AdvancedDataGrid id="advDG" width="100%"> 

<mx:columns> 
    <mx:AdvancedDataGridColumn headerText="What the heck?"/> 
    <mx:AdvancedDataGridColumn headerText="Label" dataField="label"/> 
    <mx:AdvancedDataGridColumn headerText="Column 2"/> 
    <mx:AdvancedDataGridColumn headerText="Column 3"/> 
</mx:columns> 

<mx:dataProvider> 
    <mx:HierarchicalData source="{dataProvider}"/> 
</mx:dataProvider> 

</mx:AdvancedDataGrid> 

</mx:Application> 

Cette approche évite d'éventuels problèmes liés à l'invalidation et à la validation manuelle de la liste de la grille, de la liste d'affichage, etc. après le paramétrage du fournisseur de données de la grille dans ActionScript. Ma réservation mineure utilisant cette méthode est que, comme cela crée une liaison unidirectionnelle dans flex 3, je ne suis pas sûr de savoir si je serai capable ou non d'utiliser les méthodes de l'objet HierarchicalData pour modifier l'ArrayCollection lié. Cela dit, je n'ai pas fait le tour de la source pour le HierarchicalData ou AdvancedDataGrid, mais je ne doute pas qu'ils modifient directement la source. Je publierai les résultats comme ils viennent.

À la votre!