2010-01-26 116 views
2

我有一個填充了> 1000個數據集的網格。一列使用用於顯示外鍵值的自定義itemRenderer。Flex DataGrid ItemRenderer問題

所有沒有滾動顯示的數據集都會顯示正確的信息。但是當涉及到滾動時,一些數據集將在itemRenderer中顯示錯誤的值。據我瞭解,這是因爲itemRenderers的重用。

但是,重複使用可能會很大,顯示錯誤的信息不會是結果。 那麼我該如何擺脫這個問題呢?

編輯:我已成功地擺脫這個問題,但我會發布一些代碼反正指向我的計劃:

<?xml version="1.0" encoding="utf-8"?> 

<mx:Script> 
    <![CDATA[ 
     private var dataAccess : DataAccess = DataAccess.getInstance(); 
     private var foreign : ArrayCollection = new ArrayCollection(); 

     private function onCreationComplete() : void 
     { 

      dataAccess.service.getForeignDatasets.addEventListener("result", onGetForeignDatasets); 
      dataAccess.service.getForeignDatasets(); 
     } 

     private function onGetForeignDatasets(event : ResultEvent) : void 
     { 
      foreign = event.result as ArrayCollection; 
      preSelect(); 
     } 

     //gets the entry from the foreign entity which matches 
     //the foreign key in this.data 
     private function preSelect() : void 
     { 
      for each(var obj : Object in foreign) 
       { 
        if(obj.id == data.foreignKey)) 
        { 
         value.text = obj.name; 
         return; 
        } 
       } 

      value.text = "";  
     } 

     private function onDataChange() : void 
     { 
      preSelect(); 
     }  
    ]]> 
</mx:Script> 

我將所有需要的代碼...

上面的代碼工作並解決問題他們顯示錯誤的數據。

任何其他想法來實現此功能?

回答

0

如果您的項目渲染器將信息緩存在私有變量(或其他任何地方)中,就會發生這種情況。項目渲染通過「數據」屬性獲取數據。它不應該使用不在「數據」屬性內的任何數據。如果您絕對必須到達外部以獲取其他數據(您確實不應該這樣做),那麼只要數據屬性發生更改(覆蓋數據以標記更改的標誌,然後調用super.data),請確保您使該數據無效。

如果這不能解決您的問題,請發佈您的項目渲染器代碼。

0

使用DataGrid控件的自定義ItemRenderer,我也有這種問題。 一切都很好,但當我滾動DataGrid時,我的ItemRenderer沒有顯示正確的值。我花了很多時間來了解發生了什麼。 原因是IremRenderers的工作方式。請記住itemRenderer是被回收的。 請閱讀very good article about Item Renderers

簡而言之,您必須不在構造函數或CreationComplete事件中爲其他函數設置ItemRenderer的數據。

對於MX DataGrid-你必須重寫公共職能組數據,就像這樣:

override public function set data(value:Object) : void 
{ 
    super.data = value; 
    // your code to set your data 
} 

火花的DataGrid你必須這樣做,在

override public function prepare (hasBeenRecycled) 

希望它可以幫助。