我在Flex 3中使用AdvancedDatagrid。AdvancedDatagrid的一列包含數字和字母。當我對此列進行排序時,數字會以字母開頭(AdvancedDatagrid的內部排序的默認行爲)。但是當我排序時,我希望字母在數字前出現。我知道我將不得不編寫自定義排序功能。但是,任何人都可以提出一些關於如何進行的想法。在Flex 3中的AdvancedDatagrid中排序
在此先感謝。
我在Flex 3中使用AdvancedDatagrid。AdvancedDatagrid的一列包含數字和字母。當我對此列進行排序時,數字會以字母開頭(AdvancedDatagrid的內部排序的默認行爲)。但是當我排序時,我希望字母在數字前出現。我知道我將不得不編寫自定義排序功能。但是,任何人都可以提出一些關於如何進行的想法。在Flex 3中的AdvancedDatagrid中排序
在此先感謝。
AdvancedDataGrid控件使用此函數對數據提供程序集合中的元素進行排序。回調函數的函數簽名採用兩個參數,並且具有以下形式:
mySortCompareFunction(obj1:Object, obj2:Object):int
OBJ1 - 數據元素進行比較。
obj2 - 與obj1進行比較的另一個數據元素。
函數應該返回基於對象的比較值:
- -1,如果obj1應以升序出現在obj2前面。
- 0 if ifj1 = obj2。
- 1如果obj1應該在obj2之後以升序顯示。
<mx:AdvancedDataGridColumn sortCompareFunction="mySort"
dataField="colData"/>
請嘗試以下比較排序功能。
public function mySort(obj1:Object, obj2:Object):int
{
var s1:String = obj1.colData;
var s2:String = obj2.colData;
var result:Number = s1.localeCompare(s2);
if(result != 0)
result = result > 0 ? 1 : -1;
if(s1.match(/^\d/))
{
if(s2.match(/^\d/))
return result;
else
return 1;
}
else if(s2.match(/^\d/))
return -1;
else
return result;
}
它檢查字符串的第一個字符,並按照排序順序向下推數字。它使用localeCompare來比較兩個字符串,如果它們都以字母或數字開頭 - 否則它表示以字母開頭的那個字符應該在數字之前。因此abc
將在123
之前,但a12
仍然會在abc
之前出現。
如果你想要一個完全不同的字母總是在數字之前,而不管它們在字符串中的位置,你將不得不從頭開始編寫一個 - String::charCodeAt可能是一個很好的開始。