2009-07-07 6 views
1

J'ai une sous-classe de AdvancedDataGrid montrant une structure de données arborescente. Comment puis-je, étant donné l'indice renvoyé par calculateDropIndex, obtenir l'élément à cet index?Flex: Obtenir un élément d'un AdvancedDataGrid avec un index

Après avoir lu des tonnes de code, il semble que le moyen le moins est terrible:

var oldSelectedIndex:int = this.selectedIndex; 
var mouseOverIndex:int = this.calculateDropIndex(event); 
this.selectedItem = mouseOverIndex; 
var item:* = this.selectedItem; 
this.selectedIndex = oldSelectedIndex; 

L'autre option semble bricoler avec la propriété iterator ... Mais, à en juger par la façon dont je Je l'ai vu utilisé, ça deviendra assez vite aussi. Alors, comment puis-je obtenir l'élément à un index particulier dans un DataGrid avancé sans devenir fou?

Répondre

0
this.dataProvider.getItemAt(calculateDropIndex(event)); 

En regardant à travers les documents, il semble que vous pourrez peut-être utiliser openNodes, qui retourne un tableau de tous les noeuds ouverts, ce qui devrait correspondre à votre index?

this.dataProvider.openNodes[calculateDropIndex(event)]; 
+0

Désolé, mais cela ne fonctionne pas sur des données hiérarchiques. 'this.dataProvider' est une instance de 'HierarchicalCollectionView', qui n'a pas de méthode 'getItemAt'. –

+0

L'index retourné par calculateDropIndex est-il l'index aplati de l'élément? Dans ce cas, je suppose que vous auriez à compter quel enfant il pointe vers ... ce qui je suppose n'est pas moins poilu que ce que vous suggérez ... – CookieOfFortune

+0

peut-être essayer openNodes. – CookieOfFortune

4

Vous pouvez essayer:

// Get the dropIndex from the dragEvent 
var index:int = this.calculateDropIndex(event); 
// Get the itemRenderer from the index 
var renderer:IListItemRenderer = this.indexToItemRenderer(index); 
// Get your item from the data property of the itemRenderer 
var item:Object = renderer.data; 
Questions connexes