2011-05-31 37 views
2

我在動作腳本中使用itemRenderer作爲datagird列(以特定方式顯示超鏈接形式的數據)。如何在排序後刷新Flex數據網格的項目渲染器?

一切工作正常,直到我排序的DataGrid的任何列!當我進行排序並單擊此列中的項目時,它會將錯誤的數據傳遞給onCustomLink函數。我想它是基於itemRenderer的原始索引傳遞舊數據。不知何故,itemRenderer類(CustomLinkRenderer)不刷新其數據!

我試圖把數據網格的headerRelease上的invalidateDisplayList,ValidateNow(),但沒有幫助!我甚至嘗試在headerRelease()上刷新數據提供者,但沒有幫助...

有人指出我應該怎麼做才能刷新爲headerRelease事件上的此datagrid創建的itemRenderer實例?

private var _col1:DataGridColumn; 
var rendr1:ClassFactory = new ClassFactory(CustomLinkRenderer); 
_col1.dataField = 'emp_name'; 
rendr1.properties = {SelCustomLinkName: 'emp_name'}; 
           _col1.itemRenderer = rendr1; 
this.addEventListener(CustomLinkRendererEvent.CUSTOM_LINK_RENDERER_EVENT,onCustomLink); 

謝謝...

+0

顯示更多的代碼。如果排序是問題,則發佈排序代碼。也聽起來像你的渲染器不能正常工作,所以也發佈代碼。 – 2011-05-31 17:34:20

+0

我通常通過Filter函數手動對數據源(數組集合)進行排序,除了取決於Flex內部排序。由於您正在將數據填充到組件中,然後通過項目渲染將其附加到IList控件,這顯然會導致問題,主要原因可能是由於組件的複雜性。 – Anandh 2011-05-31 19:49:11

回答

4

我猜了一下。我不清楚你提供的代碼片段在你的代碼中的位置。

但是,這聽起來像你的itemRenderer沒有正確更新自己。 itemRenderer應該監聽dataChange事件;應該在dataProvider排序時調用它。裏面的渲染器做這樣的事情:

this.addEventListener('dataChange',onDataChange); 

public function onDataChange(event:Event):void{ 
// do stuff to update the itemRenderer's display 
} 
+0

是的Flextras ...我想這是我需要做的...但你能指導我怎麼做來更新itemRenderer的顯示? – Tintin 2011-06-01 16:29:10

+0

我知道答案在於Flextras的答案 - 只是我還想知道我該怎麼做來更新itemRenderer的顯示?正如//中所提到的那樣,要更新itemRenderer的顯示... – Tintin 2011-06-14 15:00:22

+0

這取決於itemRenderer中的內容。一個示例可能是:labelDisplay.text =(data as myCustomObject).myStringProperty – JeffryHouser 2011-06-14 15:39:16

0

嗯,你的代碼是不是很清楚,因爲你沒有指定哪些數據網格,您使用的項目渲染器或如何你實際上排序。

不過,我相當肯定,你的問題是因爲你沒有刷新你的ArrayCollection:需要

arrayCollection.sort(); 
arrayCollection.refresh(); 

的刷新,讓數據網格知道更新項目渲染器的新數據。

+0

我已經這樣做了,但它沒有幫助... – Tintin 2011-06-01 16:28:14

+0

然後代碼在哪裏? – 2011-06-01 16:44:56

相關問題