2013-06-20 74 views
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(); 
    } 
} 

我喜欢的是指定排序箭头应显示在哪一列上,列是否按1列或更多列排序。有谁知道这是否可能?

回答

2

我从另一个问题找到了正在消失的排序箭头的答案: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(); 
    } 
}