2011-08-08 42 views
0

有沒有辦法將呈現器應用到網格中,以便它不修改數據提供者中的值?我有一個數據網格,在其中的一列上,我有一個客戶端渲染器,它覆蓋了設置數據函數,並將數據提供器中的數字值轉換爲單詞。我的問題是,當我按該列對網格進行排序時,它按新值進行排序,而我希望它按原始數據提供者中的舊值進行排序。不改變數據提供者的呈現器

這裏是我的渲染器:

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]); 

就在那裏,你的域值設置爲不同的值。

而不是使用自定義渲染器,只需使用labelFunction在該字段上執行convertValue。然後,非自定義渲染器將簡單地從DataGridListData中獲取標籤值並將其用於顯示的值。

+0

我並不知道labelFunction的存在,但它似乎比渲染器更適合我需要完成的工作,我應該一直使用它來代替渲染器。我改變了部分代碼來使用labelFunction,初始結果看起來很有前途。謝謝。 – supercooldude

+0

Flex團隊並不完美,但他們非常聰明。如果感覺像Flex「應該」做些什麼,那麼去看看。大多數時候,它確實......你只需要找到它:) –

2

itemRenderer的,默認情況下,不修改的dataProvider。由於您沒有顯示代碼,因此很難判斷您編寫的代碼是否修改了dataProvider。

我想要根據dataProvider中的值對DataGrid進行排序,這些值與網格中顯示的值無關;您應該在DataGrid上使用sortCompareFunction

+0

我已經發布了我的渲染器上面的代碼,希望它有幫助。 – supercooldude

相關問題