2013-06-20 2 views
0

Я использую Flex версии 3.6, и у меня есть требование сортировать сетку данных по двум столбцам. Когда я нажимаю на заголовок столбца, на нем отображается стрелка сортировки.Сортировка datagrid двумя столбцами удаляет стрелку сортировки

То, что я пытаюсь сделать, это когда я нажимаю на один конкретный столбец, он будет сортироваться по двум столбцам. Эта часть работает.

Но я заметил, что индикатор стрелки сортировки, который обычно появляется в сортированном столбце, исчез. Я использую подкласс DataGrid, поэтому после сортировки я попытался использовать placeSortArrow(), но я заметил в DataGridHeader.as, что sortArrow имеет значение null.

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 disappearing в вопросе ответил 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(); 
    } 
}