我遇到了一个奇怪的问题。
在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);
}
答案 0 :(得分:3)
只是有类似的东西我自己似乎火花网格控件需要一个dataField定义即使你有自定义排序比较功能,只需尝试在第4列添加dataField =“value1”即使你不打算使用它,看看是否有帮助。