DataGrid

11 respostas
WesleyAvila

Pessoal, boa tarde.
Gostaria de saber se existe outra forma de passar os valores do DataGrid para um label ou textinput sem ser assim dg.selectedItem.email.
Pois no meu caso, não vou saber o nome das colunas. Tem alguma forma dinâmica para recuperar esses valores do grid?

Assim é a forma que tenho que conhecer as colunas e não está servindo pra mim.

<mx:DataGrid id="dg" color="0x323232" width="100%" rowCount="3" dataProvider="{employees}"/>

        <mx:Form color="0x323232" width="100%" height="100%"  paddingTop="0" paddingBottom="0"  >
        
                   <mx:FormItem label="Name" paddingTop="0" paddingBottom="0">
                <mx:Label text="{dg.selectedItem.name}"/>
                </mx:FormItem>
                <mx:FormItem label="Email" paddingTop="0" paddingBottom="0">
                    <mx:Label text="{dg.selectedItem.email}"/>
                </mx:FormItem>
                <mx:FormItem label="Phone" paddingTop="0" paddingBottom="0">
                    <mx:Label text="{dg.selectedItem.phone}"/>
                </mx:FormItem>

        </mx:Form>

Obrigado!

11 Respostas

Ivan_Alves

já tenteou na hora que ele selecionar um item da datagrid, chamar um evento e guardar o item selecionado em um objeto mais ou menos assim

var itemSelecionado:Object = dg.selectedItem; //pega objeto seleciona e o guarda em uma variavel

//atribuir ao campos
meuTextInput.text = itemSelecionado.name.toString(); //atribui o nome ao TextInput

não sei se é isso que precisa qualquer coisa avisa ai!

WesleyAvila

Não Iven, pq assim vai dá no mesmo pra mim. Queria algo como se fosse um vetor ou uma matriz… tipo

dg.selectedItem[0,1] // onde 0 = linha e 1 = coluna.

Obrigado!

feltraco

Tenta assim:

<mx:FormItem label="Name" paddingTop="0" paddingBottom="0"> <mx:Label text="{employees.getItemAt(dg.selectedIndex).name}"/> </mx:FormItem>

WesleyAvila

Oi feltraco, dessa forma que vc passou, ainda estou usando o atributo .name

Queria acessar o valor direto do datagrid, sem conhecer o arraycollection que o preenche.

Abraços!

feltraco

Tenta assim entao…

O nome do atributo acredito que vc tem que saber… certo ?

WesleyAvila

Pois eh… é isso que eu queria saber, se eh obrigatório, se não tem outra forma de recuperar esse conteúdo do dg.

Valeu!

feltraco

Sempre tem uma forma de se fazer.

Talvez voce possa setar um ID no DataGridColumn e pegar pelos childrens do DataGrid por esse ID.

Como vc pretende popular esse DG ?

WesleyAvila

Vai ser uma consulta no banco de dados…
É o seguinte, o dg é para consulta e único em toda a aplicação.

Vc pode ver que não coloco as colunas no dg, ele já se “molda” ao meu arraycollaction (cria as colunas)
Ai eu não vou saber quais os campos desse arraycollaction, para qnd eu clicar no dg poder recuperar os dados para os textinputs…

Valeu!

WesleyAvila

Vai ser uma consulta no banco de dados…
É o seguinte, o dg é para consulta e único em toda a aplicação.

Vc pode ver que não coloco as colunas no dg, ele já se “molda” ao meu arraycollaction (cria as colunas)
Ai eu não vou saber quais os campos desse arraycollaction, para qnd eu clicar no dg poder recuperar os dados para os textinputs…

Valeu!

feltraco

Se “molda” sozinho ?
Sinceramente nao vi vantagem nisso nao.

Qual a intencao em ter um DG para toda a aplicacao ?
Se eh customizar, extende um pesonaliza e usa ele nos forms.

wagnerfrancisco

As informações que você precisa estão nos objetos DataGridColumn. Mesmo que não tenha sido você que os instanciou, eles estão disponíveis. Um exemplo simples de como fazer isso:

<mx:Form>
	<mx:FormItem label="{DataGridColumn(dg.columns[0]).dataField}">
		<s:Label text="{dg.selectedItem[DataGridColumn(dg.columns[0]).dataField]}" />
	</mx:FormItem>
	<mx:FormItem label="{DataGridColumn(dg.columns[1]).dataField}">
		<s:Label text="{dg.selectedItem[DataGridColumn(dg.columns[1]).dataField]}" />
	</mx:FormItem>
</mx:Form>
<mx:DataGrid id="dg" dataProvider="{employees}" />

Nesse trecho de código, tem o problema de você ter que saber o número de propriedades do objeto que será inserido no DataGrid (tem que especificar dg.columns[0], dg.columns[1]…). Para evitar esse problema, você pode criar os objetos via ActionScript mesmo (sem usar MXML). Percorra o array columns do DataGrid e pra cada column instancie um novo FormItem e Label e adicione na tela.

Abraço.

Criado 21 de junho de 2011
Ultima resposta 1 de jul. de 2011
Respostas 11
Participantes 4