У меня есть 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();
}