J'ai un AdvancedDatagrid et je voudrais trier les ADG selon un AdvancedDataGridColumn (studyDate) qui utilisent des chaînes au format JJ/MM/AAAA (je reçois comme celui-ci à partir du serveur):tri dates ADG
<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"/>
Et c'est la fonction que j'utiliser pour trier:
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();
}
Mais il ne sorte attendind le jour, je veux dire:
12/02/2011
23/03/2011
25/02/2011
Il trie comme ceci:
25/02/2011
23/03/2011
12/02/2011
j'essayer d'utiliser un sortCompareFunction mais il ne fonctionne pas (probablement que je fais mal) si quelqu'un peut me donner une idée ???
Merci à l'avance
EDIT:
Enfin je trouve mon problème, je viens d'essayer de trier les dates avec le format JJ/MM/AAAA, alors je dois convertir MM/jj/aaaa format avant le tri. Ceci est la fonction que je fais:
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;
}
Mais je trouve un autre problème, je dois trier les colonnes du adg la première fois, il affiche alors j'ai utilisé la fonction suivante, mais il ne sorte de la récente journée à l'ancien, je ne sais pas ce que je peux faire parce que j'ai mis sort.descending = true, des idées?
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();
}