2011-08-08 4 views
0

データプロバイダ内の値を変更しないようにレンダラをグリッドに適用する方法はありますか?私はデータグリッドを持っています。そのカラムの1つに、セットデータ関数をオーバーライドし、dataproviderの数値をワードに変換するカスタマーレンダラーがあります。私の問題は、グリッドをその列で並べ替えると、新しい値でソートされますが、元々はデータプロバイダにあった古い値でソートする必要があるということです。ここでデータプロバイダを変更しないレンダラー

は私のレンダラです:

public class MyRenderer extends Text { 

    override public function set data(value:Object):void { 
     super.data = value; 
     data[DataGridListData(listData).dataField] = MyClass.convertValue(data[DataGridListData(listData).dataField]); 
     super.invalidateDisplayList(); 
    } 
} 

答えて

2

問題は、この行です:

右が
data[DataGridListData(listData).dataField] = MyClass.convertValue(data[DataGridListData(listData).dataField]); 

、あなたは異なる値にフィールドの値を設定しています。

カスタムレンダラーを使用する代わりに、そのフィールドでconvertValueを実行するlabelFunctionを使用します。非カスタムレンダラーは、単にDataGridListDataからラベル値を取り出し、表示された値に使用します。

+0

labelFunctionの存在を認識していませんでしたが、レンダラーよりも自分が必要とするものに適しているようですが、レンダラーの代わりにレンダラーを使用していたはずです。 labelFunctionを使用するようにコードの一部を変更し、初期の結果は有望です。ありがとう。 – supercooldude

+0

Flexチームは完璧ではありませんが、かなりスマートです。 Flexのように感じたら、 "何か"すべきことがあれば、探しに行ってください。ほとんどの場合、それは...あなたはそれを見つける必要があります:) –

2

ItemRenderers、デフォルトでは、のDataProviderを変更しないでください。コードを表示していないので、あなたが書いたコードがdataProviderを修正したかどうかは分かりません。

グリッドに表示される値に関係のないdataProviderの値に基づいてDataGridをソートするとします。 DataGridでsortCompareFunctionを使用する必要があります。

+0

上記のレンダラーのコードを掲載しました。役立つことを願っています。 – supercooldude

関連する問題