【问题标题】:Flex:Problems in DataGrid default sortingFlex:DataGrid 默认排序中的问题
【发布时间】:2010-12-25 23:14:57
【问题描述】:

我有一个包含如下数据的数据网格:

列 1     列 2
1                 10
2                 11
3                 10
4                 10

当点击 Column2 并使用默认排序时,数据网格变成这样:

列 1     列 2
3                 10
1                 10
4                 10
2                 11

为什么?我想应该是:

列 1     列 2
1                 10
3                 10
4                 10
2                 11

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

谢谢!

【问题讨论】:

    标签: apache-flex datagrid


    【解决方案1】:

    这是一个有趣的问题。我调查了一下,发现最后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;
            }
    

    【讨论】:

    • Hey Robert,感谢您的回复。我想记录先前排序的内部机制可以解决问题,添加 sortCompareFunction 不是一个好方法。您有什么好主意吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多