AdvancedDataGrid

7 respostas
L

Bom, eu to tentando fazer um negocio que de tão simples não estou conseguindo, e gostaria de saber se alguém pode me ajudar.
Eu nunca tinha utilizado o AdvancedDataGrid e agora preciso criar uma arvore muito simples, que vai ser salva no MySql.
Vou ilustrar com um ArrayCollection:
private var dpFlat:ArrayCollection = new ArrayCollection([ {id:1, descricao:"Teste1",pai:0}, {id:2, descricao:"Teste2",pai:0}, {id:3, descricao:"Teste3",pai:1}]);

O que eu preciso é mostrar no AdvancedDataGrid é uma arvore, onde o nível principal (neste caso) será composto por “Teste1” e “Teste2” e “Teste3” sera filho de “Teste1”.

Deu pra entender? Alguém pode me ajudar?

Obrigado.

7 Respostas

F

Opa,
Vc precisa usar a classe GroupingCollection2.
Vc pode ter uma coleção flat como no exemplo do link:
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/AdvancedDataGrid.html
Ou vc pode usar o HierarchicalData passando como dataProvider do teu grid, mas aí os objetos filhos precisam estar num atributo children. Se não me engano o GroupingCollection2 cria um HierarchicalData.

[]s

L

fabiophx obrigado por responder…
Eu estou utilizando o Felx 4 então já uso o GroupingCollection2 (GroupingCollection é deprecated no Flex4)
Olhei vários exemplos, inclusive a documentação, mas não encontrei nada do modo tão simples como preciso fazer…
Como pode ver no link que me mandou:

[Bindable] private var dpFlat:ArrayCollection = new ArrayCollection([ {Region:"Southwest", Territory:"Arizona", Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000}, {Region:"Southwest", Territory:"Arizona", Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000}, {Region:"Southwest", Territory:"Central California", Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000}, {Region:"Southwest", Territory:"Nevada", Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000}, {Region:"Southwest", Territory:"Northern California", Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000}, {Region:"Southwest", Territory:"Northern California", Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000}, {Region:"Southwest", Territory:"Southern California", Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000}, {Region:"Southwest", Territory:"Southern California", Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000} ]);

Ok ele organiza pois tem os campos Region, Territory, Territory_Rep…
O que eu quero fazer é uma arvore mesmo, por exemplo, creiei um primeiro cadastro, o id dele vai ser 1, a descrição não importa, e o “pai” vai ser 0 (zero) pois ele vai ficar na “raiz” da árvore.
Quando eu criar outro registro, se a o primeiro estiver selecionado eu passo o id dele para o campo pai, e dai ele será um “filho” do primeiro registro, e ai sucessivamente.
Não sei se deu pra entender, mas é algo bem simples mesmo, porém não sei como o componente vai “entender” que o campo “pai” vai estar relacionado ao id de um outro registro.

Obrigado.

L

Só complementando.
Eu preciso que no MySql estejam salvos os dados conforme esse ArrayCollection:

private var dpFlat:ArrayCollection = new ArrayCollection([ {id:1, descricao:"Teste1",pai:0}, {id:2, descricao:"Teste2",pai:0}, {id:3, descricao:"Filho do Teste1",pai:1}, {id:4, descricao:"Teste4",pai:0}, {id:5, descricao:"Filho do Teste4",pai:4}, {id:6, descricao:"Filho do Filho do Teste1",pai:3});

Mas que isso não me impeça de ter N níveis no AdvancedDataGrid, seguindo a ideia de uma árvore com nodes.

F

O exemplo q lhe passei cria uma árvore no grid, abstraindo a idéia dos dados do exemplo, vc terá um groupingcollection com o atributo descricaoPai

private var dpFlat:ArrayCollection = new ArrayCollection([  
                {id:1, descricao:"Teste1",descricaoPai:"Raiz", idPai:0},  
                {id:2, descricao:"Teste2",descricaoPai:"Raiz", idPai:0},  
                {id:3, descricao:"Filho do Teste1",descricaoPai:"Teste1", idPai:1},  
                {id:4, descricao:"Teste4",descricaoPai:"Raiz", idPai:0},  
                {id:5, descricao:"Filho do Teste4",descricaoPai:"Teste 4", idPai:4},  
                {id:6, descricao:"Filho do Filho do Teste1",descricaoPai:"Teste1", idPai:1});

[]s

L

Olá mais uma vez...
Entendi em partes, até melhorou um pouco, mas ainda assim não consigo fazer com que a árvore fique de maneira correta
todos os itens estão aparecendo na raiz, e não sei onde estou errando.
Segue um dos modos como organizei e não deu certo:

<mx:AdvancedDataGrid width="497" height="294" x="10" y="14" height.adicionar="268" initialize="gc.refresh()">
		<mx:dataProvider>
			<mx:GroupingCollection2 id="gc" source="{dpFlat}">
				<mx:grouping>
					<mx:Grouping>
						<mx:GroupingField name="descricao"/>
						<mx:GroupingField name="idPai"/>
					</mx:Grouping>
				</mx:grouping>
			</mx:GroupingCollection2>
		</mx:dataProvider>
		
		<mx:columns>
			<mx:AdvancedDataGridColumn dataField="descricao" headerText="Descrição"/>
		</mx:columns>
	</mx:AdvancedDataGrid>
O array de exemplo:
private var dpFlat:ArrayCollection = new ArrayCollection([    
				{id:1, descricao:"Teste1",descricaoPai:"Raiz", idPai:0},    
				{id:2, descricao:"Teste2",descricaoPai:"Raiz", idPai:0},    
				{id:3, descricao:"Filho do Teste1",descricaoPai:"Teste1", idPai:1},
				{id:4, descricao:"Teste3",descricaoPai:"Raiz", idPai:0},
				{id:5, descricao:"Filho do Teste3",descricaoPai:"Teste 3", idPai:4},
				{id:6, descricao:"Filho do Filho do Teste1",descricaoPai:"Filho do Teste1", idPai:3}]);
F

bom dia,
Vc terá somente um groupingfield:

<mx:GroupingField name=“descricaoPai”/>

[]s

L

Daí não fica certo, ele fica assim:

Criado 28 de maio de 2013
Ultima resposta 29 de mai. de 2013
Respostas 7
Participantes 2