I have three attributes in my XML object: last name, first name, and age.
My sample XML looks like:
<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>

I am using Grouping Collection and AdvancedDataGrid to show the data.
My problem is to preserve multi-column sort.
After a refresh happens, the user selected sorting order goes away, and the
grid gets sorted by first column only.
So suppose, user has sorted the table, first ascending by "Age" and then
descending by "Name"; after a refresh happens, the grid again gets sorted
ascending by "Name".
I don't want the refresh event to change the sort order, only the data
should get refreshed.

Thanks in advance.

P.S. I can't use any other datatype like ArrayCollection, to store the data.

Part of my code looks as follows:

<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>
-- 
View this message in context: 
http://old.nabble.com/Preserve-multi-column-sort-in-AdvancedDataGrid-with-dataProvider-as-GroupingCollection-tp26741274p26741274.html
Sent from the FlexCoders mailing list archive at Nabble.com.

Reply via email to