Flex中如何创建自定义排序DataGrid控件的例子
By Minidxer | April 10, 2008
接下来的例子演示了如何利用SortField类以及自定义的比较函数,来创建可以自定义排序的DataGrid控件。
让我们先来看一下Demo(可以右键View Source或点击这里察看源代码):
下面是完整代码(或点击这里察看):
Download: main.mxml
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
- layout="vertical"
- verticalAlign="middle"
- backgroundColor="white">
- <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 {
- 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>
下面是测试用代码:
Download: tests.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="group8">
- <test2 name="old">Eight (old)</test2>
- <test3 name="new">Huit (new)</test3>
- </test>
- </tests>
代码:Peter deHaan 翻译/整理/编译:minidxer
Topics:
Flex |
Tags: compareFunction, DataGrid, descending, Flex, sort, sortCompareFunction, SortField, stringCompare, 排序
Trackbacks