apache-flex 按两列对datagrid进行排序会删除排序箭头[duplicate]

bvjxkvbb  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(151)

此问题在此处已有答案

Flex: Database driven DataGrid: arrows disappearing(3个答案)
四年前就关门了。
我使用的是Flex 3.6版,我需要按两列对数据网格进行排序。当我单击列标题时,排序箭头显示在列标题上。
我现在要做的是,当我点击一个特定的列时,它会在两列上排序。这部分工作正常。
但是我注意到通常出现在已排序列上的排序箭头指示符已经消失。我使用的是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();
    }
}

我希望指定排序箭头应该出现在哪一列,一列是按一列还是多列排序。有人知道这是否可行吗?

n7taea2i

n7taea2i1#

我从另一个问题中找到了消失类箭头的答案:Flex: Database driven DataGrid: arrows disappearingili回答的一个问题中,并对它进行了修改以适合我的代码。
因为有两个已排序的列,所以内部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();
    }
}

相关问题