В Flex я использую следующий код, чтобы разрешить сортировку в DataGrid (данные выгружаются и сортируются на стороне сервера).
private function headerReleaseHandler(event:DataGridEvent):void
{
var column:DataGridColumn = DataGridColumn(event.currentTarget.columns[event.columnIndex]);
if (this.count>0)
{
if (this.query.SortField == column.dataField)
{
this.query.SortAscending = !this.query.SortAscending;
}
else
{
this.query.SortField = column.dataField;
this.query.SortAscending = true;
}
this.fill();
}
event.preventDefault();
}
Это работает отлично, за исключением того, что стрелки, указывающие на сортировку, не отображаются. Как я могу этого добиться?
Спасибо! / Нильс





Вот пример, если это то, что вы ищете: http://blog.flexexamples.com/2008/02/28/displaying-the-sort-arrow-in-a-flex-datagrid-control-without-having-to-click-a-column/
Похоже, вам нужно обновить коллекцию, используемую вашим провайдером данных.
в приведенном выше коде что означает «this», так это datagrid, потому что меня смущает this.query.SortField, я предполагаю, что «this» и «query» являются вашими собственными настраиваемыми объектами. и почему вы проверяете счетчик. что это за счет.
С уважением -Мохан
Я столкнулся с той же проблемой, и единственным решением, которое я нашел, было переопределить DataGrid и создать собственный. Вот класс:
public class DataGridCustomSort extends DataGrid
{
public function DataGridCustomSort()
{
super();
addEventListener(DataGridEvent.HEADER_RELEASE,
headerReleaseHandlerCustomSort,
false, EventPriority.DEFAULT_HANDLER);
}
public function headerReleaseHandlerCustomSort(event:DataGridEvent):void {
mx_internal::sortIndex = event.columnIndex;
if (mx_internal::sortDirection == null || mx_internal::sortDirection == "DESC")
mx_internal::sortDirection = "ASC";
else
mx_internal::sortDirection = "DESC";
placeSortArrow();
}
}
Вы должны специально вызвать метод placeSortArrow () при получении события HEADER_RELEASE и установить индекс столбца и информацию о направлении.