Ir para conteúdo

POWERED BY:

Arquivado

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

Rodrigo Germino

Popular comboBox do Flex cbanco Mysql e PHP

Recommended Posts

Ola pessoal estou me aventurando no Flex 3 e estou encontrando dificuldade em popular um comboBox com um banco Mysql e php!

Já preparei o php para gerar um xml

 

<?php
//include
require_once("conecta.php");

//seleciona o banco
$select = mysql_select_db($banco,$link) or die ("Erro ao conecta com o banco ".mysql_error());

//faz a busca no banco
$busca = mysql_query("Select * FROM educador order by nome") or die ("Não foi possivel realizar a busca ".mysql_error());

//cria o xml
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>";
echo "<raiz>";
while($linha = mysql_fetch_array($busca)){
echo "<educador>\n";
echo "<id>".$linha['id']."</id>\n";
echo "<nome>".$linha['nome']."</nome>\n";
echo "</educador>";
}
echo "</raiz>";

mysql_free_result($busca);
?>

 

e o AS3

 

//importacao
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;

//busca dados do educador
public function busca_educador():void{
var ht1:HTTPService = new HTTPService()
	ht1.url="http://localhost/base/busca_educador.php"
	ht1.addEventListener(ResultEvent.RESULT,preenche_educador)
	ht1.send()
}
//preenche ComboBox educador
public function preenche_educador(event:ResultEvent):void{
var dados_emprestimo:ArrayCollection
dados_emprestimo = event.result.raiz.educador
	cb_educador.dataProvider = dados_emprestimo
}

 

e está retornando

 

capturaruy.jpg

 

eu fiz esse mesmo processo em um DataGrid e funcionou perfeitamente :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que no caso da combobox, você precisa setar a propriedade .label de cada item,

 

como você esta trabalhando com XML, tenta usar um labelFunction para arrumar isso

 

vai ficar algo assim(Não testado):

 

private function onLabelFunction (value:Object):String{

   return value.@nome;

}

 

 

testa para ver

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser:

 

		<s:ComboBox id="meuCombo" dataProvider="{array}" labelField="nome" />

 

 

é que no caso da combobox, você precisa setar a propriedade .label de cada item,

 

como você esta trabalhando com XML, tenta usar um labelFunction para arrumar isso

 

vai ficar algo assim(Não testado):

 

private function onLabelFunction (value:Object):String{

   return value.@nome;

}

 

 

testa para ver

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal, primeiramente muito obrigado pela força em apenas 1 semana mexendo no flex aprendi muito e até então consegui resolver o problema!!! :joia:

 

 

Primeiramente mudei a forma de gerar o xml através do PHP, complementei com no-cache, pois foi algo que me pertubou bastante usando o IE para visualizar e atualiza.

 

<?php
header ("Cache-Control: no-cache, must-revalidar");
header ("Expires: Mon, 26 jul 1997 05:00:00 GMT");
//include
require_once("conecta.php");

//seleciona o banco
$select = mysql_select_db($banco,$link) or die ("Erro ao conecta com o banco ".mysql_error());

//faz a busca no banco
$busca = mysql_query("Select * FROM educador order by nome") or die ("Não foi possivel realizar a busca ".mysql_error());

$aspas = '"';

//cria o xml
echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
echo "<banco>\n";
echo "<educadores>\n";
echo "<educador>\n";

while($linha = mysql_fetch_array($busca)){
echo "<item nome=".$aspas.$linha['nome'].$aspas."/>";
}
echo "</educador>\n";
echo "</educadores>\n";
echo "</banco>";
mysql_free_result($busca);
?>

 

Após mudei o AS

Ao invés de usar ArrayCollection como usei no dataGrid, usei o XMLList, assim trabalhando com o resultFormat="e4x"

Lembrando que, setei o labelField do ComboBox para @nome.

 

//busca dados do educador
public function busca_educador():void{
var ht1:HTTPService = new HTTPService()
	ht1.url= caminho_banco+"busca_educador.php"
	ht1.resultFormat="e4x"
	ht1.addEventListener(ResultEvent.RESULT,preenche_educador)
	ht1.send()
}
//preenche ComboBox educador
public function preenche_educador(event:ResultEvent):void{
var dados_educador:XMLList
dados_educador = event.result.educadores.educador.item
	cb_educador.dataProvider = dados_educador
}

 

 

valeu abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal, primeiramente muito obrigado pela força em apenas 1 semana mexendo no flex aprendi muito e até então consegui resolver o problema!!! :joia:

 

 

Primeiramente mudei a forma de gerar o xml através do PHP, complementei com no-cache, pois foi algo que me pertubou bastante usando o IE para visualizar e atualiza.

 

<?php
header ("Cache-Control: no-cache, must-revalidar");
header ("Expires: Mon, 26 jul 1997 05:00:00 GMT");
//include
require_once("conecta.php");

//seleciona o banco
$select = mysql_select_db($banco,$link) or die ("Erro ao conecta com o banco ".mysql_error());

//faz a busca no banco
$busca = mysql_query("Select * FROM educador order by nome") or die ("Não foi possivel realizar a busca ".mysql_error());

$aspas = '"';

//cria o xml
echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
echo "<banco>\n";
echo "<educadores>\n";
echo "<educador>\n";

while($linha = mysql_fetch_array($busca)){
echo "<item nome=".$aspas.$linha['nome'].$aspas."/>";
}
echo "</educador>\n";
echo "</educadores>\n";
echo "</banco>";
mysql_free_result($busca);
?>

 

Após mudei o AS

Ao invés de usar ArrayCollection como usei no dataGrid, usei o XMLList, assim trabalhando com o resultFormat="e4x"

Lembrando que, setei o labelField do ComboBox para @nome.

 

//busca dados do educador
public function busca_educador():void{
var ht1:HTTPService = new HTTPService()
	ht1.url= caminho_banco+"busca_educador.php"
	ht1.resultFormat="e4x"
	ht1.addEventListener(ResultEvent.RESULT,preenche_educador)
	ht1.send()
}
//preenche ComboBox educador
public function preenche_educador(event:ResultEvent):void{
var dados_educador:XMLList
dados_educador = event.result.educadores.educador.item
	cb_educador.dataProvider = dados_educador
}

 

 

valeu abraço!

 

 

Amigão já que você começou agora com flex, já comece logo do jeito eficiente use RPC. RemoteObjects são muito mais rápidos do que chamadas HTTP.Se tiver dúvida sobre como usar é so perguntar, mas tem muita coisa na net.

 

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.