0

我使用的是 Flex 3.6 版,我需要按两列对数据网格进行排序。当我单击列标题时,排序箭头会显示在它上面。

我现在要做的是,当我单击 1 个特定列时,它将按两列排序。那部分正在工作。

但我注意到通常出现在已排序列上的排序箭头指示器已经消失。我正在使用 DataGrid 的子类,所以在排序后,我尝试使用placeSortArrow(),但我注意到在DataGridHeader.assortArrow为空。

protected function headerReleaseListener(event:DataGridEvent):void
{
    if(event.columnIndex == 0)
    {
        event.preventDefault();

        var sort:Sort = new Sort();
        sort.fields = [new SortField("@name",true, true), new SortField("@address",true, false)];

        ArrayCollection(this.dataProvider).sort = sort;
        ArrayCollection(this.dataProvider).refresh();
    }
}

我想要的是指定排序箭头应该出现在哪一列上,一列是按一列还是多列排序。有谁知道这是否可能?

4

1 回答 1

2

我从另一个问题中找到了消失排序箭头的答案:Flex:数据库驱动的 DataGrid:在ili回答的问题中消失的箭头并对其进行了调整以适合我的代码。

因为有两列已排序,内部sortIndex为 -1,因此 sortArrow 为空。

通过选择一个列来显示排序(我使用了主排序列)并设置一个 sortIndex 和方向,sortArrow现在出现了。

protected function headerReleaseListener(event:DataGridEvent):void
{
    if(event.columnIndex == 0)
    {
        event.preventDefault();

        var sort:Sort = new Sort();
        sort.fields = [new SortField("@name",true, true), new SortField("@address",true, false)];

        ArrayCollection(this.dataProvider).sort = sort;
        ArrayCollection(this.dataProvider).refresh();

        mx_internal::sortIndex = event.columnIndex;

        mx_internal::sortDirection = (mx_internal::sortDirection == null || mx_internal::sortDirection == "ASC") ? "DESC" : "ASC";

        placeSortArrow();
    }
}
于 2013-06-25T09:49:58.500 回答