Flex - DataGrid dinámico com Java

Olá a todos.

Estou iniciando os meus estudos com Flex e me deparei com um DataGrid .

Montei ele da seguinte forma no flex:

<mx:DataGrid x="86" y="60" width="463" height="200" id="dataGrid1" dataProvider="{listaFuncionario}" click="loadData(int(dataGrid1.selectedIndex))">
        <mx:columns>
            <mx:DataGridColumn headerText="Matrícula" dataField="matricula"/>
            <mx:DataGridColumn headerText="Nome" dataField="nome"/>
        </mx:columns>
    </mx:DataGrid>

e no java:

while (rs.next()) {
	HashMap hashmap_funcionario   = new HashMap();
	hashmap_cidades.put("matricula",rs.getString("matricula"));
	hashmap_cidades.put("nome",     rs.getString("nome"));
}

OK FUNCIONA! Mas eu queria algo mais orientada a objetos do tipo:

List<Funcionario> listaFuncionario = new ArrayList<Funcionario>();

while (rs.next()) {
	Funcionario f = new Funcionario();
	f.setMatricula(rs.getString("matricula"));
	f.setNome(rs.getString("nome"))
	
	listaFuncionario.add(f);
}

E lá no data grid eu colocar algo do tipo:

<mx:DataGridColumn headerText="Matrícula" dataField="listaFuncionario.matricula"/>
<mx:DataGridColumn headerText="Nome" dataField="listaFuncionario.nome"/>

O dataGrid funciona somente com HashMap? No caso eu estou trabalhando com Hibertante e toda hora vou ter que fazer um for para transformar as minhas listas de objetos em listas de HashMap? :frowning:

Alguêm tem um exemplo usando dataGrid com uma lista de objetos que vem do DAO para mostras?

Obrigado.

warley ,

voce está no caminho, mas seguinte, a propriedade dataProvider ja recebe uma lista de objetos action script, e consegue interpretar seus atributos, portanto:

se voce tem

<mx: DataGrid x=“86” y=“60” width=“463” height=“200” id=“dataGrid1” dataProvider="{listaFuncionario}" />

onde a listaFuncionario tem objetos Funcionario, voce pode fazer simplesmente assim :

<mx: DataGridColumn headerText=“Matrícula” dataField=“matricula”/>

onde o dataField é referente ao atributo do seu objeto, que está na listaFuncionario, proveniente do dataProdiver do DataGrid

MARAVILHA!

Assim que chegar em casa eu vou testar!

Muito Obrigado.

Warley,
O q o A.L falou está correto.
Mas se vc precisar fazer cast

     var funcionario:Funcionario = dataGrid1.selectedItem as Funcionario;

Dará erro, pq se vc debugar verá q retornou um ArrayCollection de Object e não de Funcionario.

Se precisar dá uma olhada em RemoteObject. Inclusive recomendo pq os dados trafegam em binário sendo bem mais rápido e tb vc trabalha com objeto tanto do lado Flex como no lado Java, e vc usando Hibernate melhor ainda, pq vc pode editar um Funcionario do lado Flex e enviar para o Java e simplesmente mandar o Hibernate salvar em banco.
Dê uma olhada nas palestras no http://www.flexmania.com.br/gravacoes.php sobre BlazeDS.

Por acaso alguem sabe como pegar a propriedade de um subobjeto dentro do datagrig… algo parecido como

<mx:DataGrid x="13.25" y="125" width="426.75" id="data_Equipamento" dataProvider="{arrayEquipamento}" doubleClickEnabled="true" doubleClick="caregaAltera()">
	<mx:columns>
		<mx:DataGridColumn headerText="id" dataField="id" visible="false" />
		<mx:DataGridColumn headerText="Descrição" dataField="descricao"/>
		<mx:DataGridColumn headerText="Division"  dataField="division.tipo" width="70"/>
		<mx:DataGridColumn headerText="Familia"  dataField="familia.descricao"  width="110"/>
		<mx:DataGridColumn headerText="Fabricante" dataField="fabricante.descricao" width="80"/>
	</mx:columns>
</mx:DataGrid>

Eu tenho um array collection de equipamento e dentro de cada equipamento eu tenho objetos do tipo familia, division,fabricante…

alguem saberia como eu posso fazer ?

Obs ele esta carregando o OBJ perfeitamente tanto q se eu colocar dataField=“familia” ele mosta que tem um objeto la… e mais se eu fizer um for varrendo e dando um alert na tela ele mosta o campo familia.descricao … alquem teria uma solução ???

Fredi,
Sei q a partir do sdk 3.5 familia.descricao q vc fez funciona. Em qq situação vc pode usar labelFunction.

[]s
Fabio da Silva

fabiophx ,

Usei o labelFunction e funcionou perfeitamemte… mas acho q vou atualizar o sdk

Muito Obrigado !!!