【问题标题】:Sorting in AdvancedDatagrid in Flex 3Flex 3 中的 AdvancedDatagrid 中的排序
【发布时间】:2010-08-25 21:48:00
【问题描述】:

我在 Flex 3 中使用 AdvancedDatagrid。AdvancedDatagrid 的一列包含数字和字母。当我对此列进行排序时,数字位于字母之前(AdvancedDatagrid 内部排序的默认行为)。但我希望在排序时字母排在数字之前。

我知道我必须编写自定义排序函数。但是任何人都可以提供一些关于如何进行的想法。

提前致谢。

【问题讨论】:

    标签: apache-flex actionscript-3 advanceddatagrid


    【解决方案1】:

    使用sortCompareFunction

    AdvancedDataGrid 控件使用此函数对数据提供程序集合的元素进行排序。回调函数的函数签名有两个参数,形式如下:

    mySortCompareFunction(obj1:Object, obj2:Object):int

    obj1 — 要比较的数据元素。

    obj2 — 与 obj1 比较的另一个数据元素。

    函数应该根据对象的比较返回一个值:

    • -1 如果 obj1 应该按升序出现在 obj2 之前。
    • 0 如果 obj1 = obj2。
    • 1 如果 obj1 应该按升序出现在 obj2 之后。
    <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 之前。

    如果您想要一种完全不同的排序方式,其中字母总是在数字之前而不管它们在字符串中的位置,您必须从头开始编写一个 - String::charCodeAt 可能是一个不错的起点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2011-07-08
      • 2011-04-13
      • 1970-01-01
      相关资源
      最近更新 更多