我有一个依赖于HierarchicalCollectionView的AdvancedDataGrid,因为它是dataProvider。我想要做的是在数据首次加载时对数据进行排序,然后禁用排序,以便在初始加载后添加的任何内容都不会导致网格再次自动排序。我试过这样的事情:
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;
但是将排序设置为null只会使数据未排序。我想我要问的是:如何对底层分层数据进行排序,因为设置sort属性会使其保持动态排序。感谢您提供的任何帮助。
答案 0 :(得分:2)
就个人而言,我会在您获取数据时更改排序顺序。它可以在服务器端完成,也可以在解析数据时完成(即在模型中)。您可以使用带sortOn的数组进行一次排序。
答案 1 :(得分:0)
答案 2 :(得分:0)
我遇到了同样的问题,直到我意识到使用Sort对象的排序不会改变Collection中项目的“物理”排序,因此当您删除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;
}