Apache flex HierarchicalCollectionView:一次性排序?
我有一个AdvancedDataGrid,它依赖HierarchycalCollectionView作为数据提供者。我想做的是在第一次加载数据时对其进行排序,但随后禁用排序,这样在初始加载之后添加的任何内容都不会导致网格再次自动排序。我试过这样的方法:Apache flex HierarchicalCollectionView:一次性排序?,apache-flex,sorting,actionscript,hierarchical-data,advanceddatagrid,Apache Flex,Sorting,Actionscript,Hierarchical Data,Advanceddatagrid,我有一个AdvancedDataGrid,它依赖HierarchycalCollectionView作为数据提供者。我想做的是在第一次加载数据时对其进行排序,但随后禁用排序,这样在初始加载之后添加的任何内容都不会导致网格再次自动排序。我试过这样的方法: this._myDataProvider = new HierarchicalCollectionView( new HierarchicalData(this._model.rootTask
this._myDataProvider = new HierarchicalCollectionView(
new HierarchicalData(this._model.rootTasks));
var mySort:Sort = new Sort();
mySort.fields = [new SortField("startDate")];
this._tasksDataProvider.sort = taskSorting;
this._tasksDataProvider.refresh();
this._tasksDataProvider.sort = null;
但是将sort设置为null只会使数据未排序。我想我要问的是:既然设置sort属性似乎可以使其保持动态排序,那么如何对底层层次结构数据进行排序。感谢您提供的任何帮助。您可以
1.使用排序功能对原始数据进行排序,
2.克隆内容并将其放入一个新的集合,不进行排序(请小心,并进行手动克隆),
3.只需使用新的数据收集 就我个人而言,我会在您获取数据时更改排序顺序。要么在服务器端完成,要么在解析数据(即在模型中)时完成。您可以使用Array with sortOn进行一次性排序。我也遇到过类似的问题,直到我意识到使用sort对象进行排序不会更改集合中项目的“物理”排序,因此当您删除排序时,下一次刷新会将视图还原为实际的“物理”排序。 与上面所述类似,我通过将子集合克隆为排序顺序来解决此问题:
public static function buildPositionSort():Sort
{
var dataSortField:SortField = new SortField();
dataSortField.name = "position";
dataSortField.numeric = true;
dataSortField.descending = false;
var sort:Sort = new Sort();
sort.fields = [ dataSortField ];
return sort;
}
/**
* This method is used to create a clone of ArrayCollection, because sorting does not
* actually change the physical ordering of the items.
*/
public static function createSortedArrayCollectionCopy(source:ArrayCollection):ArrayCollection
{
var target:ArrayCollection = new ArrayCollection();
source.sort = buildPositionSort();
source.refresh();
for each (var item:Object in source)
{
if (item.children != null) item.children = createSortedArrayCollectionCopy(item.children);
target.addItem(item);
}
return target;
}