我的 XML 对象中有三个属性:姓氏、名字和年龄。我的示例 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>