热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->flash 
站内搜索:
FLASH中DataGrid数字类型排序问题的解决
作者:金彩 来源:blog 整理日期:2007-10-8

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

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

     _global.mx.controls.DataGrid.prototype.headerRelease = function(Void):Void  {
     var o = this.owner;
     // the grid
     var c:mx.controls.gridclasses.DataGridColumn = this.column;
     if (!c.sortable || !o.sortableColumns || !o.enabled) {
         return;
     }
     this.headerUp();
     this.asc = !this.asc;
     var dir:String = (this.asc) ? "ASC" : "DESC";
     // set the grids sortIndex
     o.sortIndex = o.getColumnIndex(c.columnName);
     o.sortDirection = dir;
     o.placeSortArrow();
     // do the sort if were allowed to
     if (c.sortOnHeaderRelease) {
         //和DataSet绑定时使用
         if (o.__dataProvider._dataset != undefined) {
             o.sortItemsBy(c.columnName, dir);
         } else {
              //普通数据源
             var item = o.__dataProvider;
             if (o.__dataProvider._items != undefined) {
                 //flash remoting 数据源
                 item = o.__dataProvider._items;
             }
             item.sortOn(c.columnName, Array.NUMERIC | Array.DESCENDING);
             if (dir.toUpperCase() == "DESC") {
                 item.reverse();
             }
             o.__dataProvider.updateViews("sort");
         }
     }
     // dispatch the event         
     o.dispatchEvent({type:"headerRelease", view:o, columnIndex:o.getColumnIndex(c.columnName)});
     o.dontEdit = true;
 };

注意不同的数据源的绑定方式不一样,只考虑了三种情况,红色部分是修改的位置,其余部分是原函数里有的。上面那个单独的this一定不能忘了,不然。。。
其实原理和C#的override或new有点相似
极力推荐作flash的朋友(特别是涉及到数据交互的)看上面说的《FlashMX2004 ActionScript2.0 与RIA应用程序开发》,你能从中学到很多和受到很大的启发。

相关文章