首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flex 3中的AdvancedDatagrid排序

Flex 3中的AdvancedDatagrid排序
EN

Stack Overflow用户
提问于 2010-08-25 21:48:00
回答 1查看 2K关注 0票数 1

我在Flex 3中使用AdvancedDatagrid,AdvancedDatagrid的一列包含数字和字母表。当我对这一列进行排序时,数字出现在字母之前(AdvancedDatagrid内部排序的默认行为)。但我想在排序时把字母放在数字前面。

我知道我必须编写自定义排序函数。但有谁能给出一些如何进行的想法吗。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2010-08-26 04:22:37

使用sortCompareFunction

AdvancedDataGrid控件使用此函数对数据提供程序集合的元素进行排序。回调函数的函数签名接受两个参数,并具有以下形式: mySortCompareFunction(obj1:Object, obj2:Object):int obj1 -一个要比较的数据元素. obj2 -与obj1比较的另一个数据元素。 函数应该根据对象的比较返回一个值:

  • -1如果obj1按升序出现在obj2前面。
  • 0如果obj1 = obj2。
  • 1如果obj1按升序出现在obj2之后。
代码语言:javascript
复制
<mx:AdvancedDataGridColumn sortCompareFunction="mySort" 
    dataField="colData"/>

尝试下面的排序比较函数。

代码语言:javascript
复制
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可能是一个好的起点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3570492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档