Сортировка столбцов в advancedDataGrid

Я создаю приложение, в котором я отображаю AdvanvedDataGrid с одним столбцом с датами (в формате ДД / ММ / ГГГГ), а другой с датами (в формате ЧЧ: ММ). Я также хотел бы отсортировать даты по времени (просто щелкнув заголовок столбца), есть пример ожидаемого поведения:

02.02.2011 | 10:42

02.03.2011 | 09:45

02.02.2011 | 11:45

02.03.2011 | 11:30

Итак, щелкнув заголовок «Дата», отсортируйте даты с учетом времени:

02.02.2011 | 10:42

02.02.2011 | 11:45

02.03.2011 | 09:45

02.03.2011 | 11:30

Я пытаюсь использовать AdvancedDataGridColumnGroups, но это не работает, какие-либо предложения или идеи для начала работы?

заранее спасибо

РЕДАКТИРОВАТЬ: это код для моего adg:

<mx:AdvancedDataGrid id="myADG" width="100%" height="100%" color="0x323232"
    dataProvider="{_currentDatosBusqueda}" verticalScrollPolicy="auto"
    fontSize="10" fontFamily="Arial" fontStyle="normal" fontWeight="bold" doubleClickEnabled="true"
    itemDoubleClick="dobleClickFilaDataGridBusqueda(event);" useRollOver="true">        


<mx:columns>
    <mx:AdvancedDataGridColumn headerText="Paciente ID" dataField="patientID"  paddingRight="0" resizable="false"/>
    <mx:AdvancedDataGridColumn headerText="Apellidos y nombre de paciente" dataField="patientName" resizable="false"/>
    <mx:AdvancedDataGridColumn headerText="Fecha del estudio" dataField="studyDate"  paddingRight="0" textAlign="right" resizable="false"/>
    <mx:AdvancedDataGridColumn headerText="Hora del estudio" dataField="studyTime"  paddingRight="0" textAlign="right" resizable="false"/>
    <mx:AdvancedDataGridColumn headerText="Accesion Number" dataField="accesionNumber" paddingRight="0" resizable="false"/>

</mx:columns>

_currentDatosBusqueda is an arraycollection I receive from the Server (with the correct format of dates and datetime).


person alicia    schedule 15.03.2011    source источник


Ответы (2)


Укажите полную дату в столбце даты, но отобразите только часть даты с labelFunction. Для функции метки создайте formatDate следующим образом:

import mx.formatters.DateFormatter;

private var formatter:DateFormatter = new DateFormatter();
//somewhere in init function
formatter.formatString = "DD/MM/YYYY";

private function formatDate(item:Date, column:DataGridColumn):String {
    return formatter.format(item);
}

При сортировке по этому столбцу следует учитывать полную дату.

Изменить: данные отформатированы на сервере. Но ничто не мешает вам объединить его в полноценный объект даты / времени и использовать его в двух столбцах с соответствующими функциями labelFunctions. Просто и надежно.

person alxx    schedule 15.03.2011
comment
Спасибо за ваш ответ, но я правильно форматирую даты и часы перед отображением в adg, моя проблема в том, как отсортировать несколько столбцов, соответствующих одному критерию. Я не знаю, должен ли я выполнять функцию самостоятельно или у Flex есть поддержка в этом отношении. - person alicia; 15.03.2011
comment
Я просто думаю, что восстановить полную дату в одном столбце намного проще, чем реализовать сортировку по нескольким критериям. Никогда не слышал о таких вещах в Flex, правда, он с открытым исходным кодом, но это будет непросто. - person alxx; 15.03.2011
comment
... и вы можете проделать тот же трюк со столбцом часов, используя формат чч: мм: сс. - person alxx; 15.03.2011
comment
Я не знаю, странное ли это поведение, но мне нужно это сделать, так как же отсортировать столбцы в adg? Где событие послушать? - person alicia; 16.03.2011
comment
Столбцы сортируются автоматически, сравнивая объекты данных в выбранном столбце (вы можете указать настраиваемую функцию sortCompareFunction для столбца). Чтобы отсортировать их вручную, отсортируйте поставщика данных. - person alxx; 16.03.2011
comment
Не могли бы вы рассказать мне, как реализовать эту функцию sortCompareFunction ?? Спасибо - person alicia; 04.04.2011

Наконец, я могу отсортировать столбцы моего advandedDataGrid, установив функцию сравнения для свойства HeaderRelease, но у меня все еще возникает ошибка, потому что маленькая стрелка не показывает направление сортировки, как я могу ее установить?

Моя функция headerRelease:

public function onHeaderRelease(evt:AdvancedDataGridEvent):void
        {
            evt.preventDefault();

            var srt:Sort = new Sort();
            var fields:Array = new Array();

            if( evt.columnIndex == lastIndex )
            {
                desc = !desc;
            }
            else
            {
                desc = false;
                lastIndex = evt.columnIndex;
            }

            fields.push( new SortField( evt.dataField, true, desc ) );
            if( evt.dataField != "studyDate" && evt.dataField !="studyTime" )
                fields.push( new SortField("studyDate", true, true) );
            if( evt.dataField != "studyTime" )
                fields.push( new SortField("studyTime", true, false) );

            srt.fields = fields;

            var ar:ArrayCollection = myADG.dataProvider as ArrayCollection;
            ar.sort = srt;
            ar.refresh();
        }
person alicia    schedule 20.03.2011