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;}