Сортировка дат в adg - PullRequest
       21

Сортировка дат в adg

0 голосов
/ 04 апреля 2011

У меня есть AdvancedDataGrid, и я хотел бы отсортировать adg по одному 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();         
        }

Но она сортируется только в течение дня, я имею в виду:

12/02 / 2011

23/03/2011

25/02/2011

Сортируется так:

25/02/2011

23/03/2011

12/02/2011

Iпопробуйте использовать функцию sortCompareFunction, но она не работает (возможно, я делаю что-то не так), поэтому кто-нибудь может подсказать мне что-нибудь ???

Наконец-то я нашел свою проблему, я просто попытался отсортировать даты в формате ДД / ММ / ГГГГ, поэтому мне нужно преобразовать в формат ММ / дд / гггг перед сортировкой.Я делаю эту функцию:

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;
        }

Но я нахожу другую проблему, мне нужно отсортировать столбцы adg при первом отображении, поэтому я использовал следующую функцию, но она не сортируется изс недавнего дня на старый, я не знаю, что я могу сделать, потому что я установил 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();  

        }

1 Ответ

1 голос
/ 04 апреля 2011

Вы можете использовать утилиту 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 () и отсортировать числакаким бы способом вы ни захотели ..

Это псевдокод, я понятия не имею, компилируется ли он, но он должен дать вам представление о том, как это сделать.Удачи:)

...