2013-02-22 61 views
2

我有一個advancedDataGrid自定義itemRenderer和網格外的單選按鈕組。當選擇單選按鈕時,我需要更新itemrenderer的顯示狀態。我正在使用帶有properties屬性的classfactory將參數傳遞給渲染器。刷新現有的DataGrid ItemRenderer

向網格添加新行時,itemrenderer顯示的顯示狀態正確,但當我更改單選按鈕時,屏幕上已有的任何呈示器不會刷新其顯示。我已經嘗試調用dataprovider上的refresh(),datagrid上的invalidateList()和invalidateDisplayList(),將dataprovider設置爲null,然後重置它,將列上的itemrenderer屬性設置爲null,然後重置它....沒有任何東西會強制渲染器更新。

網格是在tabNavigator中,所以如果我更改選項卡然後回來,渲染器都得到重繪,但這不是一個可接受的解決方法。如何告訴網格銷燬所有當前的渲染器並重新創建它們?

+0

您是否創建了新的classfactory? – user1875642 2013-02-22 17:31:01

+0

我嘗試在現有工廠上設置屬性並創建一個新工廠。都沒有工作。 – jhinkley 2013-02-22 17:32:48

+0

這是令人驚訝的。當您將grid.itemRenderer設置爲新的ClassFactory時,它將刪除所有舊的itemrenderer並創建新的。嘗試調試並查看是否執行了AdvancedDataGridBase中的purgeItemRenderers函數。 – user1875642 2013-02-22 17:42:00

回答

2

想通了。這裏是簡化版本。

<mx:AdvancedDataGrid 
    id="myDatagrid"> 
<mx:columns> 
    <mx:AdvancedDataGridColumn 
      dataField="Full_Name"> 
    </mx:AdvancedDataGridColumn> 
</mx:columns> 
<mx:rendererProviders> 
    <mx:AdvancedDataGridRendererProvider 
      renderer="{rendererFactory}" 
      columnSpan="0" 
      columnIndex="0" 
      depth="2"/> 
    <mx:AdvancedDataGridRendererProvider 
      renderer="{anotherFactory}" 
      columnIndex="0" 
      columnSpan="0" 
      depth="1"/> 
</mx:rendererProviders> 

如果更改{} rendererFactory(更新現有或創建新),也不會觸發刷新。在對工廠進行更改之後,我做了myDatagrid.rendererProviders = myDatagrid.rendererProviders並觸發了更新並回收了渲染器。