FLASH中DataGrid数字类型排序问题的解决

       在FLASH里使用DATAGRID,其他的功能都不错,就一样不好,排序始终是按照字母(分大小写)顺序排列,如果遇到数字型的排序后就很不爽了。做了好几个FLASH富客户端的程序(都是查询统计信息为主的程序),里面大量使用了DATAGRID,客户一直提出要按照数字大小排序。本想用绑DataSet的方法实现,
虽然加载速度比直接绑定慢的多(我用remoting传数据)。但flash里还有一个规定,绑定数据必须放在第一帧,而我的DataGrid是很多帧都存在,根本无法绑,要不就是重写程序(很不现实)。只有从脚本上动脑筋了,今天终于解决了这个头痛的问题。

       这个思路是从《FlashMX2004 ActionScript2.0 与RIA应用程序开发》里关于修改DATAGRID表头渐变的方法里想到的。当然最彻底的办法是重制DATAGRID组件,但这样工作量太大了。
将下面的代码放到flash的第一帧(或主场景的第一帧)即可。

 1 _global.mx.controls.DataGrid.prototype.headerRelease = function(Void):Void  {
 2     var o = this.owner;
 3     // the grid
 4     var c:mx.controls.gridclasses.DataGridColumn = this.column;
 5     if (!c.sortable || !o.sortableColumns || !o.enabled) {
 6         return;
 7     }
 8     this.headerUp();
 9     this.asc = !this.asc;
10     var dir:String = (this.asc) ? "ASC" : "DESC";
11     // set the grid's sortIndex
12     o.sortIndex = o.getColumnIndex(c.columnName);
13     o.sortDirection = dir;
14     o.placeSortArrow();
15     // do the sort if we're allowed to
16     if (c.sortOnHeaderRelease) {
17         //和DataSet绑定时使用
18         if (o.__dataProvider._dataset != undefined) {
19             o.sortItemsBy(c.columnName, dir);
20         } else {
21              //普通数据源
22             var item = o.__dataProvider;
23             if (o.__dataProvider._items != undefined) {
24                 //flash remoting 数据源
25                 item = o.__dataProvider._items;
26             }
27             item.sortOn(c.columnName, Array.NUMERIC | Array.DESCENDING);
28             if (dir.toUpperCase() == "DESC") {
29                 item.reverse();
30             }
31             o.__dataProvider.updateViews("sort"
);
32         }
33     }
34     // dispatch the event          
35     o.dispatchEvent({type:"headerRelease", view:o, columnIndex:o.getColumnIndex(c.columnName)});
36     o.dontEdit = true;
37 };
注意不同的数据源的绑定方式不一样,我只考虑了三种情况,红色部分是我修改的位置,其余部分是原函数里有的。上面那个单独的this一定不能忘了,不然。。。
其实原理和C#的override或new有点相似
极力推荐作flash的朋友(特别是涉及到数据交互的)看上面说的《FlashMX2004 ActionScript2.0 与RIA应用程序开发》,你能从中学到很多和受到很大的启发。
posted @ 2006-03-10 22:30  金彩  阅读(2340)  评论(4编辑  收藏  举报