私は奇妙な問題を抱えています。
Flex 4 では、Spark DataGrid があり、アイテム レンダラーと列の 1 つに定義された並べ替え比較関数の両方があります。奇妙なことに、この列は降順でソートされません。
データはもともとソートされていません。列ヘッダーをクリックすると、「上」矢印が表示され、データが昇順でソートされます。ただし、列ヘッダーを再度クリックしても何も起こりません。「上」矢印はそのままで、データは昇順でソートされたままです。
コードをデバッグしたところ、並べ替え比較関数の column.sortDescending が常に false であることがわかりました (降順並べ替えが発生する場合、これは true である必要がありますか?)。
私はこれを長い間グーグルで検索し、ここで検索しましたが、何も見つかりませんでした.
誰にもアイデアはありますか?
前もって感謝します。
//編集
簡単なコード例:
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);
}