Flex DataGrid列排序降序无法正常工作

时间:2012-08-29 11:22:44

标签: flex sorting datagrid

我遇到了一个奇怪的问题。

在Flex 4中,我有一个Spark DataGrid,并且为其中一个列定义了一个项目渲染器和一个排序比较函数。奇怪的是,此列不会按降序排序。

数据最初未排序。单击列标题将显示“向上”箭头,数据按升序排序。但是,再次单击列标题不会执行任何操作。 “向上”箭头停留,数据按升序排序。

我已经通过代码调试,发现column.sortDescending在比较排序功能始终是假的(这应该是真实的,当降序排序应该发生?)。

我用Google搜索了很长一段时间并在这里搜索但没有找到任何东西。

有人有什么想法吗?

提前致谢。

//修改

简单示例代码:

CreationComplete函数使用一些随机值初始化数据:

protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                arrayData = new ArrayCollection();

                var obj:Object;
                for(var i:Number=0; i < 10; i++) {
                    obj = new Object();
                    obj.value1 = i;
                    obj.value2 = Math.floor(Math.random() * (1 + 100 - 1)) + 1;
                    obj.value3 = Math.floor(Math.random() * (1 + 100 - 1)) + 1;

                    arrayData.addItem(obj);
                }
            }

Datagrid定义第4列的列,其中包含项呈示器和定义的排序比较函数。

<s:DataGrid x="122" y="142" width="391" height="223" requestedRowCount="4" dataProvider="{arrayData}">
        <s:columns>
            <s:ArrayList>
                <s:GridColumn dataField="value1" headerText="Value 1"></s:GridColumn>
                <s:GridColumn dataField="value2" headerText="Value 2"></s:GridColumn>
                <s:GridColumn dataField="value3" headerText="Value 3"></s:GridColumn>
                <s:GridColumn headerText="Value 3" sortable="true" itemRenderer="ItemRendererTest" sortCompareFunction="sortCompareFunc"></s:GridColumn>
            </s:ArrayList>
        </s:columns>
        <s:typicalItem>
            <fx:Object dataField1="Sample Data" dataField2="Sample Data" dataField3="Sample Data"></fx:Object>
        </s:typicalItem>
    </s:DataGrid>

项目渲染器代码:

override public function prepare(hasBeenRecycled:Boolean):void {
                var columnString:String = data["value1"] + ":" + data["value2"] + ":" + data["value3"];

                lblData.text = columnString;
            }

排序比较功能:

private function sortCompareFunc(obj1:Object, obj2:Object, col:GridColumn):int {
                var obj1String:String = obj1["value1"] + ":" + obj1["value2"] + ":" + obj1["value3"];
                var obj2String:String = obj2["value1"] + ":" + obj2["value2"] + ":" + obj2["value3"];

                var collator:SortingCollator = new SortingCollator();

                return collator.compare(obj1String, obj2String);
            }

1 个答案:

答案 0 :(得分:3)

只是有类似的东西我自己似乎火花网格控件需要一个dataField定义即使你有自定义排序比较功能,只需尝试在第4列添加dataField =“value1”即使你不打算使用它,看看是否有帮助。