FLEX DataGrid 点击表头后按不同方式排序

来源:互联网 发布:天使之翼 网络大电影 编辑:程序博客网 时间:2024/06/12 12:45
import mx.controls.DateField;   import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;   import mx.controls.dataGridClasses.DataGridColumn;   import mx.events.AdvancedDataGridEvent;   import mx.events.DataGridEvent;   import mx.utils.ObjectUtil;   /**   * 点击dataGrid列头上的排序按钮   */  public function dataGridSort(evt:DataGridEvent):void {   //1 得到要排序的列   var column:DataGridColumn = DataGridColumn(evt.currentTarget.columns[evt.columnIndex]);   //2 得到列名   var columnName:String=column.dataField;   //3 重写此列的排序函数   column.sortCompareFunction=function(obj1:Object,obj2:Object):int{        return superSort(obj1,obj2,columnName);   };   }   /**   * 点击AdvancedDataGrid列头上的排序按钮   */  private function advancedDataGridSort(evt:AdvancedDataGridEvent):void {   var column:AdvancedDataGridColumn = AdvancedDataGridColumn(evt.currentTarget.columns[evt.columnIndex]);   var columnName:String=column.dataField;   column.sortCompareFunction=function(obj1:Object,obj2:Object):int{     return superSort(obj1,obj2,columnName);   };   }   /**   * 根据不同的数据类型选择不同的排序方式 优先级是数字、日期、字符串   */  public function superSort(obj1:Object,obj2:Object,columnName:String):int{   //验证数据类型 Numbe Date String   if(!isNaN(obj1[columnName])){   return number_sortCompareFunc(obj1,obj2,columnName);   }   if(strIsDate(obj1[columnName])){   var inputFormat:String=getInputFormat(obj1[columnName]);   return date_sortCompareFunc(obj1,obj2,columnName,inputFormat);   }   return string_sortCompareFunc(obj1,obj2,columnName);   }   /**   * 日期的排序   */  private function date_sortCompareFunc(obj1:Object, obj2:Object,columnName:String,inputFormat:String):int {   var date1:Date =DateField.stringToDate(obj1[columnName],inputFormat);   var date2:Date =DateField.stringToDate(obj2[columnName],inputFormat);   return ObjectUtil.dateCompare(date1, date2);   }   /**   * 字符串的排序   */  private function string_sortCompareFunc(obj1:Object, obj2:Object,columnName:String):int{   var str1:String=obj1[columnName];   var str2:String=obj2[columnName];   return ObjectUtil.stringCompare(str1, str2,false);   }   /**   * 数字的排序   */  private function number_sortCompareFunc(obj1:Object, obj2:Object,columnName:String):int{   var num1:Number=Number(obj1[columnName]);   var num2:Number=Number(obj2[columnName]);   return ObjectUtil.numericCompare(num1,num2);   }   /**   * 验证一个字符串是否是日期格式   */  private function strIsDate(str:String):Boolean{   var inputFormat:String=getInputFormat(str);   //如果找不到日期表示符号则直接返回false   if(inputFormat==null){   return false;   }   var date:Date=DateField.stringToDate(str,inputFormat);   //如果是日期date不为null   if(date!=null){   return true;   }else{   return false;   }   }   /**   * 得到日期的格式  判断的顺序  */  private function getInputFormat(str:String):String{   if(str.indexOf("-")!=-1){   return "YYYY-MM-DD";   }   if(str.indexOf("/")!=-1){   return "YYYY/MM/DD";   }   if(str.indexOf(".")!=-1){   return "YYYY.MM.DD";   }   return null;   }  //  DataGrid排序  import mx.controls.DateField;import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;import mx.controls.dataGridClasses.DataGridColumn;import mx.events.AdvancedDataGridEvent;import mx.events.DataGridEvent;import mx.utils.ObjectUtil;/** * 点击dataGrid列头上的排序按钮 */public function dataGridSort(evt:DataGridEvent):void {//1 得到要排序的列var column:DataGridColumn = DataGridColumn(evt.currentTarget.columns[evt.columnIndex]);//2 得到列名var columnName:String=column.dataField;//3 重写此列的排序函数column.sortCompareFunction=function(obj1:Object,obj2:Object):int{return superSort(obj1,obj2,columnName);};}/** * 点击AdvancedDataGrid列头上的排序按钮 */private function advancedDataGridSort(evt:AdvancedDataGridEvent):void {var column:AdvancedDataGridColumn = AdvancedDataGridColumn(evt.currentTarget.columns[evt.columnIndex]);var columnName:String=column.dataField;column.sortCompareFunction=function(obj1:Object,obj2:Object):int{return superSort(obj1,obj2,columnName);};}/** * 根据不同的数据类型选择不同的排序方式 优先级是数字、日期、字符串 */public function superSort(obj1:Object,obj2:Object,columnName:String):int{//验证数据类型 Numbe Date Stringif(!isNaN(obj1[columnName])){return number_sortCompareFunc(obj1,obj2,columnName);}if(strIsDate(obj1[columnName])){var inputFormat:String=getInputFormat(obj1[columnName]);return date_sortCompareFunc(obj1,obj2,columnName,inputFormat);}return string_sortCompareFunc(obj1,obj2,columnName);}/** * 日期的排序 */private function date_sortCompareFunc(obj1:Object, obj2:Object,columnName:String,inputFormat:String):int {var date1:Date =DateField.stringToDate(obj1[columnName],inputFormat);var date2:Date =DateField.stringToDate(obj2[columnName],inputFormat);return ObjectUtil.dateCompare(date1, date2);}/** * 字符串的排序 */private function string_sortCompareFunc(obj1:Object, obj2:Object,columnName:String):int{var str1:String=obj1[columnName];var str2:String=obj2[columnName];return ObjectUtil.stringCompare(str1, str2,false);}/** * 数字的排序 */private function number_sortCompareFunc(obj1:Object, obj2:Object,columnName:String):int{var num1:Number=Number(obj1[columnName]);var num2:Number=Number(obj2[columnName]);return ObjectUtil.numericCompare(num1,num2);}/** * 验证一个字符串是否是日期格式 */private function strIsDate(str:String):Boolean{var inputFormat:String=getInputFormat(str);//如果找不到日期表示符号则直接返回falseif(inputFormat==null){return false;}var date:Date=DateField.stringToDate(str,inputFormat);//如果是日期date不为nullif(date!=null){return true;}else{return false;}}/** * 得到日期的格式  判断的顺序  */private function getInputFormat(str:String):String{if(str.indexOf("-")!=-1){return "YYYY-MM-DD";}if(str.indexOf("/")!=-1){return "YYYY/MM/DD";}if(str.indexOf(".")!=-1){return "YYYY.MM.DD";}return null;}

 
原创粉丝点击