我有一个advancedDataGrid,我想根据一个AdvancedDataGridColumn(studyDate)对adg进行排序,它使用格式为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
我尝试使用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;
}
但我发现另一个问题,我需要在第一次显示时对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();
}
答案 0 :(得分:1)
您可以使用Object util执行以下操作:
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()并按照您想要的方式对数字进行排序..
这是伪代码,我不知道它是否编译,但它应该让你知道如何去做。祝你好运:)