Flex:DataGrid默认排序中的问题

时间:2009-12-12 10:46:30

标签: flex datagrid

我有一个数据网格,其数据如下:

Column1 Column2
1 10
2 11
3 10
4 10

单击Column2并使用Default Sort时,datagrid将变为:

Column1 Column2
3 10
1 10
4 10
2 11

为什么?我想它应该是:

Column1 Column2
1 10
3 10
4 10
2 11

默认排序有什么问题?有谁能告诉我如何修复它?

谢谢!

1 个答案:

答案 0 :(得分:3)

这是一个有趣的问题。我调查了一下,发现最后Array.sortOn()函数被调用了。在该函数的描述中有一句话:

  • 修改数组以反映排序顺序;具有相同排序字段的多个元素将在 无特定顺序 的排序数组中连续放置。

无法查看代码,我会做出一个有根据的猜测,即不保留项目的先前顺序的选择取决于它的效率成本,并且没有真正的理由在大多数情况下保持订单。这就是默认的1列排序反映的行为。

在你的情况下,快速和肮脏(因为它是一个星期六:))如何获得你想要的结果的例子。 您的数据网格:

<mx:DataGrid id="DG" >
    <mx:columns>
        <mx:DataGridColumn  dataField="0"  />
        <mx:DataGridColumn  dataField="1" sortCompareFunction="testsortCompareFunction" />
    </mx:columns>
</mx:DataGrid>

排序功能:

private function testsortCompareFunction(object1:Object,object2:Object):int
        {
            if (object1[1]>object2[1]) return 1;
            if (object1[1]<object2[1]) return -1;
            if (object1[1]==object2[1]) 
            {
                if (object1[0]>object2[0]) return 1;
                if (object1[0]<object2[0]) return -1;
            }
            return 0;
        }