1

Flex 3でAdvancedDatagridを使用しています。AdvancedDatagridの1つの列には、数字とアルファベットが含まれています。この列を並べ替えると、数字がアルファベットの前に表示されます(AdvancedDatagridの内部並べ替えのデフォルトの動作)。ただし、並べ替えるときは、数字の前にアルファベットを付けたいです。

カスタムソート関数を作成する必要があることはわかっています。しかし、誰もがどのように進めるかについていくつかのアイデアを与えることができます。

前もって感謝します。

4

1 に答える 1

1

sortCompareFunctionを使用する

AdvancedDataGrid コントロールは、この関数を使用して、データ プロバイダー コレクションの要素を並べ替えます。コールバック関数の関数シグネチャは 2 つのパラメーターを取り、次の形式をとります。

mySortCompareFunction(obj1:Object, obj2:Object):int

obj1 — 比較するデータ要素。

obj2 — obj1 と比較する別のデータ要素。

関数は、オブジェクトの比較に基づいて値を返す必要があります。

  • obj1 が昇順で obj2 の前に表示される場合は -1。
  • obj1 = obj2 の場合は 0。
  • obj1 が obj2 の後に昇順で表示される場合は 1。
<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を使用して 2 つの文字列を比較します。したがって、abc先行123しますが、a12それでも先行しabcます。

文字列内の位置に関係なく、文字が常に数字の前にあるまったく異なる並べ替えが必要な場合は、最初から作成する必要があります- String::charCodeAtは、開始するのに適した場所かもしれません。

于 2010-08-26T04:22:37.807 に答える