XML オブジェクトには、姓、名、年齢の 3 つの属性があります。私のサンプル XML は次のようになります。
<dataXML>
<info last="Abc" first="Def" age="20"/>
<info last="Abc" first="Hij" age="10"/>
<info last="Xyz" first="Klm" age="25"/>
<info last="Xyz" first="Opq" age="64"/>
<info last="Xyz" first="Rst" age="08"/>
</dataXML>
Grouping Collection と AdvancedDataGrid を使用してデータを表示しています。私の問題は、複数列の並べ替えを維持することです。更新が発生すると、ユーザーが選択した並べ替え順序がなくなり、グリッドは最初の列のみで並べ替えられます。したがって、ユーザーが最初に「年齢」で昇順、次に「名前」で降順でテーブルをソートしたとします。更新が発生した後、グリッドは再び「名前」で昇順にソートされます。更新イベントで並べ替え順序を変更したくありません。データのみを更新する必要があります。
前もって感謝します。
PS ArrayCollection のような他のデータ型を使用してデータを格納することはできません。
私のコードの一部は次のようになります。
<mx:Script>
<![CDATA[
[Bindable]
private var dataXML:XMLListCollection = new XMLListCollection();
private function refresh(data:Object):void
{
dataXML.source = XML(data.result.value).info;
gc.refresh();
adGrid.dataProvider = gc;
adGrid.validateNow();
adGrid.dataProvider.refresh();
}
private function nameCompareFunction(a:XML, b:XML):int
{
return ObjectUtil.stringCompare(a.attribute("last") + a.attribute("first"), b.attribute("last") + b.attribute("first"));
}
private function valueSortCompareFunction(a:XML, b:XML):int
{
return ObjectUtil.numericCompare(Number(a.attribute("age")), Number(b.attribute("age")));
}
]]>
</mx:Script>
<Control:AdvancedDataGrid id="adGrid">
<Control:dataProvider>
<mx:GroupingCollection id="gc" source="{dataXML}">
<mx:grouping>
<mx:Grouping>
<mx:GroupingField name="@last" compareFunction="nameCompareFunction"/>
</mx:Grouping>
</mx:grouping>
</mx:GroupingCollection>
</Control:dataProvider>
<Control:columns>
<mx:AdvancedDataGridColumn id="ADGCName" dataField="@first" headerText="Name" wordWrap="true"/>
<mx:AdvancedDataGridColumn id="ADGCAge" dataField="@age" headerText="Age" sortCompareFunction="valueSortCompareFunction"/>
</Control:columns>
</Control:AdvancedDataGrid>