Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Radaelli

Flex - Problema populando AdvancedDataGrid com AMFPHP

Recommended Posts

Olá a todos,

 

estou desenvolvendo uma ferramenta desktop em Flex, que utiliza um BD mysql em um servidor. Para conexão com o BD, utilizo PHP através do AMFPHP.

Preciso utilizar um AdvancedDataGrid para mostrar os dados vindos de um RemoteObject, porque AdvancedDataGrid? Porque preciso que os dados sejam mostrados com hierarquia, como um TreeGrid.

 

Já tentei de tudo, não tenho mais idéia do correto a ser feito:

Tem como fazer isso diretamente(myAdvancedDataGrid.dataProvider = myService.myRemoteClass.lastResult;)?

Converter o Object para XML? Como?

 

Ficarei grato por qualquer tentativa de ajuda.

 

Abraço a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você jogar o result da consulta em uma variavel do tipo arrayCollection e jogar esse arrayCollection como dataProvider do advGrid não funciona nao?

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, da na mesma. A estrutura do meu Object esta assim:

(Array)#0

[0] (Object)#1

cliente = "1"

data_entrega = "2010-05-18"

data_fim = (null)

data_inicio = (null)

data_solicitado = "2010-05-17"

descricao = "Reformular Relatório Lucro Certo"

nro_job = "1"

obs = (null)

status = "2"

[1] (Object)#2

cliente = "4"

data_entrega = "2010-05-18"

data_fim = (null)

data_inicio = (null)

data_solicitado = "2010-05-17"

descricao = "Teste Cadastro Job"

nro_job = "3"

obs = (null)

status = "1"

 

tentei converter pra XML com uma função que promete isso:

private function objectToXML(obj:Object):XML {
                var qName:QName = new QName("job");
                var xmlDocument:XMLDocument = new XMLDocument();
                var simpleXMLEncoder:SimpleXMLEncoder = new SimpleXMLEncoder(xmlDocument);
                var xmlNode:XMLNode = simpleXMLEncoder.encodeValue(obj, qName, xmlDocument);
                var xml:XML = new XML(xmlDocument.toString());
                 //trace(xml.toXMLString());
                return xml;
            }

mas me retorna isso:

<job>
 <list>
   <source/>
   <uid>2FE240B0-F87E-E7B1-4E48-B7D14B901F78</uid>
 </list>
 <source/>
</job>

 

nem parecido com o que preciso. Hehehehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce tem que fazer como eu falei que funciona.

 

Cria uma var bindable do tipo ArrayCollection e pronto

 

[Bindable]
private var _data:ArrayCollection;

Poe ela pra ser preenchida com o retorno do php, algo assim dependendo de como ta o seu codigo ai:

 

_data = new ArrayCollection(e.result as Array);

E depois você seta no seu AdvancedDataGrid, assim:

 

<mx:AdvancedDataGrid id="myADG" width="100%" height="100%">        
            <mx:dataProvider>
                <mx:GroupingCollection id="gc" source="{_data}">
                    <mx:grouping>
                        <mx:Grouping>
                            <mx:GroupingField name=""/>
                            <mx:GroupingField name=""/>
                        </mx:Grouping>
                    </mx:grouping>
                </mx:GroupingCollection>
            </mx:dataProvider> 
.
.
. //Termina de setar os campos com o dataField

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda, mas ainda não consegui sair do chão, fiz como você disse:

 

Variavel:

[Bindable]
public var data_job:ArrayCollection;

Recebendo os dados:

private function busca_jobResult():void{
      data_job = new ArrayCollection(jobClienteService.busca_job.lastResult as Array);
}

AdvancedDataGrid:

<mx:AdvancedDataGrid id="tabela_jobs" top="34" bottom="10" minWidth="300" left="10" right="226"
	disclosureClosedIcon="@Embed(source='/assets/tree_openNode.png')"
	disclosureOpenIcon="@Embed(source='/assets/tree_closeNode.png')">
	<mx:dataProvider>
		<mx:GroupingCollection id="job" source="{data_job}">
			<mx:grouping>
				<mx:Grouping>
					<mx:GroupingField name="nro_job"/>
					<mx:GroupingField name="descricao"/>
				</mx:Grouping>
			</mx:grouping>
		</mx:GroupingCollection>
	</mx:dataProvider>
</mx:AdvancedDataGrid>

O resultado foi o advdg vazio nem um erro e nem uma informação. Tenho certeza que o data_job não esta vazio, porque se jogar ela em um combobox ele é preenchido normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver o problema!

pego meu ArrayCollection e converto em XMLlist daí declaro como HierarchicalData e tá tudo certo.

 

meu código tah meio enrolado, mas acho que da pra ter uma idéia:

private function atualiza_tabela():void{
			var xml:XMLList;
			data_job_ant = data_job;
			data_tarefa_ant = data_tarefa;
			
			xml = objectToXML(data_job, data_tarefa);
			
			dataHierarchy = new HierarchicalData(xml);
		 }

private function objectToXML(XMLJob:ArrayCollection, XMLTarefa:ArrayCollection):XMLList {
 		   var XMLStr:String = "<?xml version=\”1.0\” encoding=\”UTF-8\”?>\n";
    		for each(var XMLNodeJob:Object in XMLJob) {
     			XMLStr += "<job";
     			XMLStr += " nro_job='" + XMLNodeJob.nro_job + "'";
     			XMLStr += " descricao='" + XMLNodeJob.descricao + "'";
     			XMLStr += " cliente='" + XMLNodeJob.nome_cliente + "'";
     			XMLStr += " data_entrega='" + XMLNodeJob.data_entrega + "'";
     			XMLStr += " data_solicitado='" + XMLNodeJob.data_solicitado + "'";
     			XMLStr += " status='" + XMLNodeJob.status + "'";
     			XMLStr += " >\n";
     			for each(var XMLNodeTar:Object in XMLTarefa) {
     				if (XMLNodeTar.nro_job == XMLNodeJob.nro_job){
	     				XMLStr += "<tarefa";
		     			XMLStr += " nro_job='" + XMLNodeTar.nro_job + "'";
		     			XMLStr += " descricao='" + XMLNodeTar.descricao + "'";
		     			XMLStr += " data_inicio='" + XMLNodeTar.data_inicio + "'";
		     			XMLStr += " data_fim='" + XMLNodeTar.data_fim + "'";
		     			XMLStr += " tempo='" + XMLNodeTar.tempo + "'";
		     			XMLStr += " desenvolvimento='" + XMLNodeTar.nome_desenvolvimento + "'";
		     			XMLStr += " aprovacao='" + XMLNodeTar.nome_aprovacao + "'";
		     			XMLStr += " status='" + XMLNodeTar.status + "'";
		     			XMLStr += " obs='" + XMLNodeTar.obs + "'";
		     			XMLStr += " />\n";
     				}
     			}
     			
     			XMLStr += "</job>\n";
     	}
    			return new XMLList(XMLStr);
		}
		 

A dúvida cruel agora é a seguinte, tenho um timer q da um refresh no AdvancedDataGrid a cada 10s, será que tem alguma forma de dar o refresh sem que os nodos expandidos não sejam fechados?

meio confuso neh! mas fico grato se alguém tiver alguma idéia.

 

Abs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.