2009-07-07 3 views
1

У меня есть подкласс AdvancedDataGrid, показывающий древовидную структуру данных. Как я могу, учитывая индекс, возвращаемый calculateDropIndex, получить элемент в этом индексе?Flex: получить элемент из AdvancedDataGrid с индексом

После прочтения пачки коды, похоже, наименее ужасным способом является:

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

Другого варианта, кажется, мастерить вокруг с iterator собственности ... Но, судя по тому, как я» я видел, как он использовался, и это будет довольно быстро.

Итак, как я могу получить элемент по определенному индексу в расширенном datagrid, не сойдя с ума?

ответ

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

Просматривая документы, кажется, что вы можете быть в состоянии использовать openNodes, который возвращает массив всех открытых узлов, которые должны соответствовать с индексом?

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

Извините, но это не работает на иерархических данных. 'this.dataProvider' является экземпляром 'HierarchicalCollectionView', который не имеет метода getItemAt. –

+0

Является ли индекс, возвращаемый вычислениемDropIndex, сглаженным индексом элемента? В этом случае, я полагаю, вам нужно было бы подсчитать, к какому ребенку это относится ... что, по-моему, не менее волосатое, чем то, что вы предлагаете ... – CookieOfFortune

+0

возможно попробуйте openNodes. – CookieOfFortune

4

Вы можете попробовать:

// 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; 
Смежные вопросы