【问题标题】:Sorting dates in adg在 adg 中对日期进行排序
【发布时间】:2011-04-04 11:06:48
【问题描述】:

我有一个 advancedDataGrid,我想根据一个 AdvancedDataGridColumn(studyDate) 对广告进行排序,它使用 DD/MM/YYYY 格式的字符串(我从服务器收到这样的信息):

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

    <mx:AdvancedDataGridColumn headerText="Fecha del estudio" dataField="studyDate"  paddingRight="0" textAlign="right" resizable="false"/>

这是我用来排序的函数:

private function sortData():void {
            var sort:Sort = new Sort();
            var sortField:SortField = new SortField("studyDate", true, true);
            var sortField2:SortField = new SortField("studyTime", true, false);

            sort.fields = [sortField, sortField2];        
            _currentDatosBusqueda.sort = sort;   

            _currentDatosBusqueda.refresh();         
        }

但我的意思是,它只在当天进行排序:

2011 年 12 月 2 日

23/03/2011

25/02/2011

如下:

25/02/2011

23/03/2011

2011 年 12 月 2 日

我尝试使用 sortCompareFunction 但它不起作用(可能我做错了)所以有人可以给我任何想法吗???

提前致谢

编辑

最后我发现了我的问题,我只是尝试使用 DD/MM/YYYY 格式对日期进行排序,所以我需要在排序之前转换为 MM/dd/yyyy 格式。这是我做的功能:

private function date_sortCompareFunc(itemA:Object, itemB:Object, fields:Array = null):int {
            var year:int = int(itemA.studyDate.substr(6,4));
            var month:int = int(itemA.studyDate.substr(3,2))-1;
            var day:int = int(itemA.studyDate.substr(0,2));

            var dateA : Date = new Date(year, month, day);

            year = int(itemB.studyDate.substr(6,4));
            month = int(itemB.studyDate.substr(3,2))-1;
            day = int(itemB.studyDate.substr(0,2));

            var dateB : Date = new Date(year, month, day);

        //  return ObjectUtil.dateCompare(dateA, dateB);

            return ( dateA.valueOf() > dateB.valueOf() ) ? 1 : ( dateA.valueOf() < dateB.valueOf() ) ? -1 : 0;
        }

但我发现另一个问题,我需要在广告第一次显示时对其列进行排序,所以我使用了以下函数,但它没有从最近的一天排序到旧的一天,我不知道我能做什么我确实是因为我设置了 sort.descending=true,有什么想法吗?

private function sortData():void {
            var sort:Sort = new Sort();
            var sortField:SortField = new SortField("studyDate", true, true);
            sortField.descending = true;
            var sortField2:SortField = new SortField("studyTime", true, false);

            sort.fields = [sortField, sortField2];        
            sort.compareFunction = date_sortCompareFunc;            
            _currentDatosBusqueda.sort = sort;   
            _currentDatosBusqueda.refresh();  

        }

【问题讨论】:

    标签: apache-flex actionscript-3 date advanceddatagrid


    【解决方案1】:

    您可以使用 Object 工具来执行以下操作:

    private function dateSortCompare(itemA:YourObject, itemB:YourObject):int 
    {
      var dateA:Date = new Date(Date.parse(itemA.date));
      var dateB:Date = new Date(Date.parse(itemB.date));
      return ObjectUtil.dateCompare(dateA, dateB);
    }
    

    然后在您的专栏中:

     <mx:AdvancedDataGridColumn headerText="Fecha del estudio" dataField="studyDate"  paddingRight="0" textAlign="right" resizable="false" sortCompareFunction="dateSortCompare"/>
    

    或执行 Date.time() 并按照您想要的方式对数字进行排序..

    这是伪代码,我不知道它是否编译,但它应该让你知道如何去做。祝你好运:)

    【讨论】:

      猜你喜欢
      • 2015-06-28
      • 1970-01-01
      • 2014-07-20
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      相关资源
      最近更新 更多