我有一个奇怪的问题。
在 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);
}