我有一个 AdvancedDataGrid,其 dataProvider 为 HierarchicalCollectionView。当我查看包含我正在使用的数据集的网格并单击我想要排序的列的标题时,一切都运行良好。它完全按照我的预期按层次结构进行排序。
我现在想做的是当网格显示给用户时已经对其进行排序。有没有办法以编程方式执行此操作?我一生都无法弄清楚如何做到这一点,显然这是可能的,因为 AdvancedDataGrid 内置了此功能。
编辑 - 顺便说一句,我已经尝试过:
var myData:HierarchicalCollectionView = new HierarchicalCollectionView(theDataSource);
// Works fine using only the line above and clicking the header to sort.
// This is the part that I tried adding:
var sort:Sort = new Sort();
sort.fields = [new SortField("startDate")];
myData.sort = sort;
myData.refresh();
就排序而言,这似乎做了一些事情,但它的排序方式与单击列标题的方式不同。顺便说一句,“startDate”是 theDataSource
中对象的一个属性。
最佳答案
看起来您想要对日期进行排序。 Sort
无法立即执行此操作。您必须使用 compareFunction
。
如果您的对象是 Date
类型,则非常简单:
var sortField:SortField = new SortField("startDate");
sortField.compareFunction = ObjectUtil.dateCompare;
如果您的列包含日期作为字符串,您必须首先解析它们(代码示例来自 http://blog.flexexamples.com/2007/08/12/sorting-date-columns-in-a-datagrid/ ):
private function date_sortCompareFunc(itemA:Object, itemB:Object):int
{
/* Date.parse() returns an int, but
ObjectUtil.dateCompare() expects two
Date objects, so convert String to
int to Date. */
var dateA:Date = new Date(Date.parse(itemA));
var dateB:Date = new Date(Date.parse(itemB));
return ObjectUtil.dateCompare(dateA, dateB);
}
var sortField:SortField = new SortField("startDate");
sortField.compareFunction = date_sortCompareFunc;
然后只需使用 sortField
就像您在示例中所做的那样。这应该可以正常工作。
关于apache-flex - 如何对具有分层数据的AdvancedDataGrid进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476180/