Apache flex 在advancedDataGrid中对列进行排序

Apache flex 在advancedDataGrid中对列进行排序,apache-flex,actionscript-3,advanceddatagrid,Apache Flex,Actionscript 3,Advanceddatagrid,我正在制作一个应用程序,其中显示一个AdvancedDataGrid,其中一列显示日期(格式为DD/MM/YYYY),另一列显示日期时间(格式为HH:MM)。我还想根据日期时间对日期进行排序(只需单击列的标题),这里有一个预期行为的示例: 2011年2月2日| 10:42 2011年2月3日| 09:45 2011年2月2日11:45 2011年2月3日11:30 因此,点击“日期”标题,根据日期时间对日期进行排序: 2011年2月2日| 10:42 2011年2月2日11:45 2011年2月

我正在制作一个应用程序,其中显示一个AdvancedDataGrid,其中一列显示日期(格式为DD/MM/YYYY),另一列显示日期时间(格式为HH:MM)。我还想根据日期时间对日期进行排序(只需单击列的标题),这里有一个预期行为的示例:

2011年2月2日| 10:42

2011年2月3日| 09:45

2011年2月2日11:45

2011年2月3日11:30

因此,点击“日期”标题,根据日期时间对日期进行排序:

2011年2月2日| 10:42

2011年2月2日11:45

2011年2月3日| 09:45

2011年2月3日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是我从服务器接收的一个arraycollection(具有正确的日期和日期时间格式)。

在日期列中提供完整的日期,但使用
labelFunction
仅呈现日期部分。对于label函数,创建
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);
}
此列的排序应考虑完整日期


编辑:确定,数据在服务器上格式化。但没有什么可以阻止您将其组合成完整的日期/时间对象,并在两列上使用相应的LabelFunction。简单而健壮。

最后,我可以对AdvancedDataGrid中的列进行排序,将比较函数设置为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();
        }

谢谢你的回复,但我在显示在adg前正确设置了日期和小时的格式,我的问题是如何将多个列按一个标准排序。我不知道我是否必须自己做一个函数,或者flex是否支持这个功能。我只是认为在一列中恢复完整日期比在多个条件上实现排序要容易得多。在Flex中从来没有听说过这样的事情,虽然它是开源的,但这并不简单……而且你可以使用hh:mm:ss格式对小时列执行相同的操作。我不知道这是否是一种奇怪的行为,但这是我需要做的,所以如何在adg中对列进行排序?要侦听的事件在哪里?通过比较单击列中的数据对象,列会自动排序(您可以为列提供自定义排序比较)。要手动排序,请对数据提供程序进行排序。