<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" backgroundColor="white" viewSourceURL="srcview/index.html"> <mx:Script> <!--[CDATA[ import mx.collections.SortField; import mx.collections.Sort; import mx.controls.dataGridClasses.DataGridColumn; import mx.utils.ObjectUtil; private function sortOld():void { var sortField:SortField = new SortField(); sortField.compareFunction = test2_compareFunc; sortField.descending = checkBox.selected; var oldSort:Sort = new Sort(); oldSort.fields = [sortField]; xmlListColl.sort = oldSort; xmlListColl.refresh(); } private function sortNew():void { var sortField:SortField = new SortField(); sortField.compareFunction = test3_compareFunc; sortField.descending = checkBox.selected; var sort:Sort = new Sort(); sort.fields = [sortField]; xmlListColl.sort = sort; xmlListColl.refresh(); } private function resetSort():void { xmlListColl.sort = null; xmlListColl.refresh(); } private function dataGridCol_labelFunc(item:XML, col:DataGridColumn):String { //(@name == col.dataField)的代码的作用是筛选 return item.*.(@name == col.dataField).text(); } private function test2_compareFunc(itemA:XML, itemB:XML):int { var valueA:String = itemA.test2.text(); var valueB:String = itemB.test2.text(); return ObjectUtil.stringCompare(valueA, valueB); } private function test3_compareFunc(itemA:XML, itemB:XML):int { var valueA:String = itemA.test3.text(); var valueB:String = itemB.test3.text(); return ObjectUtil.stringCompare(valueA, valueB); } ]]--> </mx:Script> <mx:XML id="tests" source="tests.xml" /> <mx:XMLListCollection id="xmlListColl" source="{tests.test}" /> <mx:ApplicationControlBar dock="true"> <mx:CheckBox id="checkBox" label="descending:" labelPlacement="left" /> <mx:Button label="Sort 'old'" click="sortOld();" /> <mx:Button label="Sort 'new'" click="sortNew();" /> <mx:Button label="Reset sort" click="resetSort();" /> </mx:ApplicationControlBar> <mx:DataGrid id="dataGrid" dataProvider="{xmlListColl}" width="300" verticalScrollPolicy="on" sortableColumns="true"> <mx:columns> <mx:DataGridColumn dataField="old" labelFunction="dataGridCol_labelFunc" sortCompareFunction="test2_compareFunc" /> <mx:DataGridColumn dataField="new" labelFunction="dataGridCol_labelFunc" sortCompareFunction="test3_compareFunc"/> </mx:columns> </mx:DataGrid> </mx:Application> xml文件 <?xml version="1.0" encoding="utf-8"?> <tests> <test name="group1"> <test2 name="old">One (old)</test2> <test3 name="new">Un (new)</test3> </test> <test name="group2"> <test2 name="old">Two (old)</test2> <test3 name="new">Deux (new)</test3> </test> <test name="group3"> <test2 name="old">Three (old)</test2> <test3 name="new">Trois (new)</test3> </test> <test name="group4"> <test2 name="old">Four (old)</test2> <test3 name="new">Quatre (new)</test3> </test> <test name="group5"> <test2 name="old">Five (old)</test2> <test3 name="new">Cinq (new)</test3> </test> <test name="group6"> <test2 name="old">Six (old)</test2> <test3 name="new">Six (new)</test3> </test> <test name="group7"> <test2 name="old">Seven (old)</test2> <test3 name="new">Sept (new)</test3> </test> <test name="group8"> <test2 name="old">Eight (old)</test2> <test3 name="new">Huit (new)</test3> </test> </tests>