2004/12/15 | [教程]为DataGrid组件进行数据排序
类别(我闪推荐) | 评论(3) | 阅读(207) | 发表于 17:31

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]

0

评论Comments