У меня есть расширенный datagrid, и я реализую пользовательский сортировку. Моя сетка adv.data замедляется при каждой последующей сортировке ... и если узлы открыты, это просто отключается.Flex AdvancedDataGrid Задача пользовательской сортировки
Мои данные выглядит следующим образом (г = GRP на ID) *
ID f_name l_name fld1 fld2
(g)
--------------------------------------
1 A1 B1 xyx xyz
A6 B6 xyx xyz
--------------------------------------
2 A3 B3 xyx xyz
A8 B8 xyx xyz
--------------------------------------
Когда я сортирую на F_NAME или L_NAME сортировки ArrayCollection должны сортировать и отображать данные следующим образом (г = GRP на ID) * :
ID f_name l_name fld1 fld2
(g)
-----------------------------------------
1(1) A1 B1 xyx xyz
2(2) A3 B3 xyx xyz
-----------------------------------------
1(3) A6 B6 xyx xyz
2(4) A6 B6 xyx xyz
-----------------------------------------
Чтобы сделать это, я используя событие сортировки, который выглядит следующим образом
protected function adg1_headerReleaseHandler(event:AdvancedDataGridEvent):void
{
event.preventDefault();
sort_dir = !sort_dir;
var sort:Sort = new Sort();
sort.fields = [new SortField(event.dataField, true,sort_dir),new SortField('ID', true,sort_dir)]
_ds.sort = sort;
_ds.refresh();
adg1.dataProvider = null;
var previousRegId:int = 0;
var counter:int = 0;
for each (var item:DueInVO in _ds) {
if (previousRegId != item.ID) {
counter++;
previousRegId = item.ID
}
item.uid = counter;
}
/*
var previousRegId:int = 0;
var counter:int = 0;
var csr:IViewCursor = DataSource.createCursor();
while(!csr.afterLast){
if (previousRegId != csr.current.registration_id) {
counter++;
previousRegId = csr.current.registration_id
}
csr.current.uid = counter;
csr.moveNext();
}
*/
setGrouping(['uid']);
//csr = null;
}
и функция setGrouping выглядит следующим образом:
protected function setGrouping(columnNames:Array):void{
var _groupingColumns:Array = [];
var gc:GroupingField;
if (columnNames.length > 0) {
var _groupedData:GroupingCollection2 = new GroupingCollection2();
var _grouping:Grouping = new Grouping();
for (var i:int=0;i<columnNames.length;i++) {
gc = new GroupingField(columnNames[i]);
//gc.numeric = true;
//gc.compareFunction = compareFunc;
//gc.groupingFunction = groupFunc;
_groupingColumns.push(gc);
}
_groupedData.source = _ds;
_grouping.fields = _groupingColumns;
_groupedData.grouping = _grouping
_groupedData.refresh();
adg1.dataProvider = _groupedData;
} else {
adg1.dataProvider = _ds;
}
}
Однако каждая последующая просьба разобраться занимает больше времени и больше времени, чтобы решить. Как указано выше, если удалены узлы группировки, то существует высокая вероятность того, что Flash Player выйдет из строя.
Я предполагаю, что где-то есть mem-leak, но я не могу нанести на него палец.
Если кто-то требует полного кода, я буду рад предоставить ему ..
Вся помощь очень ценится
Функция обратного вызова, которая вызывается при сортировке данных в столбце. Если это свойство не указано, сортировка пытается использовать базовую строку или сортировку по номерам данных. Если данные не являются строкой или номером или если свойство dataField не является допустимым свойством поставщика данных, сортировка не работает или генерирует исключение.Если вы укажете значение свойства labelFunction, вы также должны предоставить функцию свойству sortCompareFunction, если сортировка в этом столбце не разрешена. – user478727
Функция sortCompareFunction принимает в качестве аргументов два объекта. Эти объекты могут быть любыми, и ваш код для этой функции должен определять, какое свойство объекта сравнивать и как его сравнивать. Данные, безусловно, не должны быть строкой или числом. – Robusto