PS:看到的一篇老外的教程,简单的翻译给大家。
如果我们的DataGrid组件中某列数据如下:“1, 213, 11, 7”,当我们排列后变为“1,11,213,7”。这显然不是我们所要的(“1,7,11,213”),因为Flash是按照第一个数字进行排序的。下面的方法即会解决这个问题。
1、确保DataGrid组件已在库中。(拖入舞台,然后再删除)
2、在第一帧输入以下代码就OK了。(如图为测试结果)
import mx.controls.gridclasses.DataGridColumn; var my_dp:Array = new Array({name:'Grissom, M.', avg:0.279}, {name:'Bonds, B.', avg:0.362}, {name:'Cruz, D.', avg:0.292}, {name:'Snow, J.', avg:0.327}); var dg = this.createClassObject(mx.controls.DataGrid, "my_dg", 999, {dataProvider:my_dp}); dg.setSize(240, 180); var name_dgc:DataGridColumn = new DataGridColumn("name"); name_dgc.headerText = "Name:"; name_dgc.width = 160; dg.addColumn(name_dgc); var avg_dgc:DataGridColumn = new DataGridColumn("avg"); avg_dgc.headerText = "Avg:"; avg_dgc.width = 60; dg.addColumn(avg_dgc); // var myListener:Object = new Object(); myListener.headerRelease = function(evt:Object) { var sortOrder:String = evt.target.sortDirection; var sortColumn:String = evt.target.columnNames[evt.columnIndex]; switch (sortColumn) { case 'name' : sortArray(my_dp, sortColumn, "TEXTNOCASE", sortOrder); break; case 'avg' : sortArray(my_dp, sortColumn, "NUMERIC", sortOrder); break; } }; my_dg.addEventListener("headerRelease", myListener); // function sortArray(my_array:Array, sortColumn:String, sortType:String, sortOrder:String) { var sortOptions:Number = 0; switch (sortType.toUpperCase()) { case 'NUMERIC' : sortOptions |= Array.NUMERIC; break; case 'TEXTNOCASE' : sortOptions |= Array.CASEINSENSITIVE; break; } if (sortOrder.toUpperCase() == 'DESC') { sortOptions |= Array.DESCENDING; } my_array.sortOn(sortColumn, sortOptions); } |
[From Jen deHaan]