Posts Tagged ‘components’
AdvancedDataGrid with contained DataGrid
Essa semana nos deparamos com a necessidade de apresentar uma entidade hierarquica em forma de tabela.
Até aí tudo bem, o problema é que os itens filhos deveriam mostrar colunas diferentes do pai.
Eu sabia que era possível fazer com AdvancedDatagrid no Flex 3 sem apelar para gambiarras. Foi quando descobri os rendererProviders e do AdvancedDatagrid.
Os rendererProviders do AdvancedDatagrid permitem customizações bem avançadas.
No meu caso eu precisava renderizar um outro Datagrid no nível filho.
A documentação do AdvancedDatagrid não detalha bem esse recurso ficando apenas nos exemplos de gráficos dentro dos grids.
Encontrei um post no Flex Cookbook com um exemplo prático do .
http://www.riamaven.com/FlexSolutions/ADGwithContainedDGDemo.html
O código é realmente muito simples, mais do que eu esperava encontrar. No AdvancedDatagrid principal define-se um AdvancedDataGridRendererProvider em rendererProviders.
<mx:rendererProviders> <mx:AdvancedDataGridRendererProvider depth="2" columnIndex="1" renderer="SubDataGrid" columnSpan="0" /> </mx:rendererProviders>
No atributo renderer define-se a classe a ser renderizada, nesse exemplo a classe criada se chama SubDataGrid e extende de AdvancedDatagrid. O único segredo está em fazer override do método “set data”.
<mx:Script> <![CDATA[ import mx.controls.Alert; override public function set data(value:Object):void { // set dataProvider dataProvider = value.service; // If using the array data source, use this instead: // dataProvider = value; // adjust rowCount this.rowCount = dataProvider.length + 1; } ]]> </mx:Script>
Normalmente não é algo que eu aconselharia, deve ser usado com moderação e como última alternativa pra não prejudicar demais a usabilidade e a focalidade das informações.
Flex Cookbook: http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&postId=12326&productId=2