Datagrid排序错误?

时间:2014-04-09 18:29:09

标签: flex sorting datagrid

我试图对DataGrid Flex组件进行排序,问题是,当我单击箭头对其进行排序时,排序函数似乎不仅可以对我点击的列进行排序,还可以对其他列进行排序列也是。

为了更好地解释它,让我说我的行和列是这样的:(null只是网格中的空白区域)

  

借记_ _ __ _ __ credit
  10
_ __ _ __ _ ___ (空)
  (空)的
__ _ __ _ __ 11
  12
_ __ _ __ _ ___ (空)
  (空)的
__ _ __ _ _ _13

现在,当我点击点数进行排序时,会发生这种情况:

  

借记_ _ __ _ __ credit
  (空)的
__ _ __ _ ____ 13
  12
_ __ _ __ _ __ _ (空)
  (null_的 _ __ _ __ _ __ 11
  10
_ __ _ ____ (空)

而不是:

  

借记_ _ __ _ __ credit
  (空)的
__ _ __ _ ____ 13
  (空
_ __ _ __ _ ____ 11
  12
_ __ _ __ _ __ (空)
  10
_ __ _ ____ (空)

我调试了它,比较函数正在接收4个值,10,11,12和13,而不是只有两个,13和11.这让我想知道,为什么会发生这种情况?,不应该排序功能只关心我排序的列而不是其余的排序?..

无论如何,结果搞砸了。

2 个答案:

答案 0 :(得分:0)

你可以自己定制sortCompareFunction。

DataGridColumn将行的数据排序为字符串,如果要比较为数字,则应定义sortCompareFunction

即:

public static function numericCompare(key:String):Function
    {
        return function(itemA:Object, itemB:Object):int
        {
            if (itemA == null && itemB == null)
                return 0;

            if (itemA == null)
                return 1;

            if (itemB == null)
                return -1;

            var emptyA:Boolean = StringUtil.isEmpty(itemA[key]);
            var emptyB:Boolean = StringUtil.isEmpty(itemB[key]);

            if (emptyA && emptyB)
                return 0;

            if (emptyA)
                return 1;

            if (emptyB)
                return -1;

            var num1:Number = Number(itemA[key]);
            var num2:Number = Number(itemB[key]);

            return mx.utils.ObjectUtil.numericCompare(num1, num2);
        }
    }

答案 1 :(得分:0)

实际上,document说:

  

注意:obj1和obj2参数是整个数据提供者元素,而不仅仅是项目的数据。

所以,这是正常的和预期的。

您可能认为它很奇怪或很复杂,但DataGrid中的许多功能都使用其行的数据,而不仅仅是其列的数据。

如果他们只提供有关列(或数据字段)的信息,但您需要有关数据的更多信息,那么代码将变得非常脏和臭。或者,您可能必须为此编写几十行代码。

看,有人处于类似情况,就在昨天:validation in flex datagrid using itemEditor
(想象一下,您必须对值字段进行排序。某些值需要根据其类型进行解析。)

方便,在现实世界中为您节省了很多。

相关问题