0

我有一个奇怪的问题。

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

数据原本没有排序。单击列标题会显示“向上”箭头,并且数据按升序排序。但是,再次单击列标题不会执行任何操作。“向上”箭头保持不变,数据保持升序排序。

我已经调试了代码,发现排序比较函数中的 column.sortDescending 总是错误的(当降序排序应该发生时,这应该是真的吗?)。

我已经用谷歌搜索了很长时间并在这里搜索但没有找到任何东西。

有人有想法么?

提前致谢。

//编辑

简单示例代码:

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);
            }
4

1 回答 1

4

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

于 2012-09-27T16:28:42.097 回答