Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 如何使用分层数据对AdvancedDataGrid进行排序?_Apache Flex_Sorting_Actionscript_Hierarchical Data_Advanceddatagrid - Fatal编程技术网

Apache flex 如何使用分层数据对AdvancedDataGrid进行排序?

Apache flex 如何使用分层数据对AdvancedDataGrid进行排序?,apache-flex,sorting,actionscript,hierarchical-data,advanceddatagrid,Apache Flex,Sorting,Actionscript,Hierarchical Data,Advanceddatagrid,我有一个AdvancedDataGrid,它的数据提供者是HierarchycalCollectionView。当我使用正在使用的数据集查看网格,并单击要排序的列的标题时,一切都很正常。它按照我所期望的方式对其进行分层排序 我现在想做的是,当网格显示给用户时,它已经被排序了。有没有一种方法可以通过编程来实现这一点?我一辈子都想不出如何做到这一点,显然这是可能的,因为AdvancedDataGrid内置了这种功能 编辑-顺便说一句,我试过: var myData:HierarchicalColle

我有一个AdvancedDataGrid,它的数据提供者是HierarchycalCollectionView。当我使用正在使用的数据集查看网格,并单击要排序的列的标题时,一切都很正常。它按照我所期望的方式对其进行分层排序

我现在想做的是,当网格显示给用户时,它已经被排序了。有没有一种方法可以通过编程来实现这一点?我一辈子都想不出如何做到这一点,显然这是可能的,因为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”是数据源中对象的属性。

您可以创建一个新的高级数据网格排序事件,并在网格上设置分层数据后将其分派到网格上(不幸的是,我不得不使用callLater来给网格时间在内部处理集合—似乎ADG的数据提供者的分配有时是异步的)

这段代码来自ADG的一个扩展,因此如果您不创建扩展,您可能希望dispatchEvent实际位于网格实例上

代码中还有一个注释:

            //setting sortDescending=true on a column does not work as expected.  so, until a solution
            //is found, this works just as well.  the event that is dispatch just tells the column
            //to reset.  so, one resorts ascending (the default), while a second resorts descending.
            //however, this second is only dispatched if defaultSortDesc is true on the grid.
            if (defaultSortDesc)
            {
                dispatchEvent(advancedDataGridEvent);
            }

它将事件分派两次以翻转排序。

看起来您想要对日期进行排序。
排序
无法在开箱即用。您必须使用
比较功能

如果对象的类型为
Date
,则很容易:

var sortField:SortField = new SortField("startDate");
sortField.compareFunction = ObjectUtil.dateCompare;
如果列包含日期作为字符串,则必须首先对其进行解析(代码示例来自:


然后像您在示例中所做的那样使用
sortField
。这应该很好。

当对象的类型为
Date
时,我不确定是否需要该比较函数。现在无法测试它……它不需要比较函数。我意外地包含了
新sortField(“startDate”,true)
,但我认为日期不会区分大小写,所以将其更改为remove
true
有效。
var sortField:SortField = new SortField("startDate");
sortField.compareFunction = ObjectUtil.dateCompare;
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;