我在Flex 3中使用AdvancedDatagrid,AdvancedDatagrid的一列包含数字和字母表。当我对这一列进行排序时,数字出现在字母之前(AdvancedDatagrid内部排序的默认行为)。但我想在排序时把字母放在数字前面。
我知道我必须编写自定义排序函数。但有谁能给出一些如何进行的想法吗。
提前谢谢。
发布于 2010-08-26 04:22:37
使用sortCompareFunction
AdvancedDataGrid控件使用此函数对数据提供程序集合的元素进行排序。回调函数的函数签名接受两个参数,并具有以下形式:
mySortCompareFunction(obj1:Object, obj2:Object):intobj1 -一个要比较的数据元素. obj2 -与obj1比较的另一个数据元素。 函数应该根据对象的比较返回一个值:
<mx:AdvancedDataGridColumn sortCompareFunction="mySort"
dataField="colData"/>尝试下面的排序比较函数。
public function mySort(obj1:Object, obj2:Object):int
{
var s1:String = obj1.colData;
var s2:String = obj2.colData;
var result:Number = s1.localeCompare(s2);
if(result != 0)
result = result > 0 ? 1 : -1;
if(s1.match(/^\d/))
{
if(s2.match(/^\d/))
return result;
else
return 1;
}
else if(s2.match(/^\d/))
return -1;
else
return result;
}它检查字符串的第一个字符,并按排序顺序向下推送以数字开头的字符串。如果两个字符串都以字母或数字开头,则使用localeCompare进行比较--否则,它会说以字母开头的字符串应该在数字字符串之前。因此,abc将先于123,但a12仍将先于abc。
如果您想要一种完全不同的类型,无论字母在字符串中的位置如何,字母总是先于数字,那么您必须从头开始写一个-- 字符串:charCodeAt可能是一个好的起点。
https://stackoverflow.com/questions/3570492
复制相似问题