【问题标题】:Sort Columns in advancedDataGrid在 advancedDataGrid 中对列进行排序
【发布时间】:2011-03-15 09:00:38
【问题描述】:

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

2011 年 2 月 2 日 | 10:42

2011 年 3 月 2 日 | 09:45

2011 年 2 月 2 日 | 11:45

2011 年 3 月 2 日 | 11:30

因此,点击“日期”标题对日期进行排序,同时考虑日期时间:

2011 年 2 月 2 日 | 10:42

2011 年 2 月 2 日 | 11:45

2011 年 3 月 2 日 | 09:45

2011 年 3 月 2 日 | 11:30

我正在尝试使用 AdvancedDataGridColumnGroups,但它不起作用,有什么建议或想法可以开始工作吗?

提前致谢

编辑: 这是我的广告代码:

<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 是我从服务器收到的一个数组集合(日期和日期时间格式正确)。

【问题讨论】:

    标签: apache-flex actionscript-3 advanceddatagrid


    【解决方案1】:

    在日期列中提供完整日期,但仅使用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);
    }
    

    按此列排序应考虑完整日期。

    编辑:好的,数据已在服务器上格式化。但是没有什么能阻止您将它组合成完整的日期/时间对象并在具有相应标签函数的两列上使用它。简单而强大。

    【讨论】:

    • 感谢您的回复,但我在广告中显示之前的日期和时间格式正确,我的问题是如何对符合一个标准的多个列进行排序。我不知道我是否必须自己制作一个函数,或者flex是否支持这件事。
    • 我只是认为在一个列中恢复完整日期比在多个条件上实现排序要容易得多。在 Flex 中从未听说过这样的事情,虽然它是开源的,但这并不简单。
    • ...您可以使用 hh:mm:ss 格式对 hours 列执行相同的操作。
    • 我不知道这是否是一种奇怪的行为,但这是我需要做的事情,那么如何对广告中的列进行排序?监听的事件在哪里?
    • 列会自动比较点击列中的数据对象进行排序(您可以为列提供自定义 sortCompareFunction)。要手动对它们进行排序,请对数据提供者进行排序。
    【解决方案2】:

    最后我可以对我的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();
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2013-10-12
      • 2020-09-28
      相关资源
      最近更新 更多