PDA

Просмотр полной версии : Порядок следования элементов в ADG


chaos
19.04.2010, 13:55
Доброго времени суток.
Имеется иерархическая структура(2х уровневая).
у парентов(1ый уровень) у ValueObject'ов есть поле order отвечающее за порядок отображения этих парентов(те перед установкой дата-провайдера колекция сортируется по этому полю).
Дальше необходимо в процессе работы менять порядок групп(перетаскивание или еще как).
столкнулся с проблемой. Есть следующий код

//запоминаем индекс выделенного элемента
const selectedIndex:int = dataGrid.selectedIndex;

var cursor:IViewCursor = HierarchicalCollectionView(dataGrid.dataProvider).createCursor();
//бежим курсором до следующей первой группы(2)
cursor.seek(CursorBookmark.FIRST, selectedIndex + 1);
while (! (cursor.current.valueOf() is ClientProfileGroup))
Assert.isTrue(cursor.moveNext());

//удаляем ее(2) и запоминаем
var item:Object = cursor.remove();

//откатываемся на сохранненый индекс
cursor.seek(CursorBookmark.FIRST, selectedIndex);
//а группа ли это
Assert.isTrue(cursor.current.valueOf() is ClientProfileGroup);

//меняем order у групп
const order:uint = cursor.current.order;
cursor.current.order = item.order;
item.order = order;

//вставляем сохраненную группу(2)
cursor.insert(item);


данный код делает опускание группы.

те имея
1
+----childrens
2
+----childrens
3
+----childrens
4
+----childrens

опускаем группу например №3, получаем
1
+----childrens
2
+----childrens
4
+----childrens
3
+----childrens

код работает если все группы свернуты, если группа которая находится выше опускаемой развернута(те видны чилды) то код начинает работать странно - меняется порядок у групп которые находятся ниже опускаемой, причем у всех :) - каруселька получается.


Подскажите как решить проблему :wacko:3ий день не могу добиться нормального результата

Добавлено через 27 часов 44 минуты
не знаю на сколько правильно такое, решил проблему изменениями в модели

//берем выделенную группу
var selectedItem:TreeItem = dataGrid.selectedItem as TreeItem;

//а группа ли это
Assert.notNull(selectedItem.valueOf() as ClientProfileGroup);

//Определяем индекс группы в массиве
const selItemIdx:int = model.data.getItemIndex(selectedItem);

//должен быть найден
Assert.isTrue(selItemIdx != -1);

//индекс группыд ля замены
const idx:int = selItemIdx + 1;

//метод не должен выполняться для последней группы
Assert.isTrue(idx < model.data.length);

//берем группу для замены
var item:TreeItem = model.data.getItemAt(idx) as TreeItem;

//группа ли это?
Assert.notNull(item);

//меняем группы местами в массиве
model.data.addItemAt(model.data.removeItemAt(selItemIdx), idx);

//меняем order у групп
const order:uint = selectedItem.order;
selectedItem.order = item.order;
item.order = order;

//отмечаем поднимаемую группу на сохранение
if (false == editedItems.contains(item))
editedItems.addItem(item);

dataGrid.selectedItem = selectedItem;


ЗЫ комменты пишу до того как пишу код, если кому интересно вдруг стало - не лень ли мне....