2013-02-22 5 views
2

У меня есть advancedDataGrid с настраиваемым элементом itemRenderer и группой переключателей за пределами сетки. При выборе переключателей мне нужно обновить состояние отображения itemrenderers. Я использую classfactory с атрибутом свойств для передачи в параметр рендерерам.Обновить существующий DataGrid ItemRenderers

При добавлении новой строки в сетку элемент-указатель появляется с правильным состоянием отображения, но любые рендеринги, которые уже находятся на экране при изменении переключателя, не обновляют их отображение. Я попытался вызвать refresh() на dataprovider, invalidateList() и invalidateDisplayList() в datagrid, установив dataprovider в null и затем сбросив его, установив свойство itemrenderer в столбце нулевым и затем сбросив его .... ничто не заставляет рендеринга обновляться.

Сетка находится в tabNavigator, поэтому, если я изменяю вкладку, а затем возвращаюсь, рендеринги все перерисовываются, но это не приемлемое обходное решение. Как вам сказать сетке уничтожить все свои текущие рендереры и воссоздать их?

+0

Вы создаете новый класс? – user1875642

+0

Я попытался установить свойства на существующем заводе, а также создать новый. Ничего не сработало. – jhinkley

+0

это удивительно. когда вы устанавливаете grid.itemRenderer в новый ClassFactory, он удаляет все старые itemrenderers и создает новые. Попробуйте отладить и проверить, работает ли функция purgeItemRenderers в AdvancedDataGridBase. – user1875642

ответ

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, и это вызвало обновление и переработало средства визуализации.

Смежные вопросы