Galera, tenho uma função que recebe um object, converto ele para array e depois tento inserir em um datagrid, porem, a datagrid simplesmente não exibe os dados.
Podem me ajudar ?!!
Segue os codigos:
AS3:
public function resultListaApresentacoes(lista:Object):void{
var aux:Array = new Array();
var listaAux:Array = new Array();
var i:int;
var valor:String;
if(lista.result!=false)
{
aux.splice(0);
for each ( var dados:Object in lista.result )
{
if ( dados != null ){ listaAux.push(dados) }
}
for(i=0;i<listaAux.length;i++)
{
valor = listaAux[i].ppt;
aux.push({ppt: valor});
}
pptsLista.dataProvider=aux;
}
else
{
//
}
}
Flex:
<mx:DataGrid id="pptsLista" x="11" y="6" width="259" height="201" alternatingItemColors="[#F7F7F7, #FFFFFF]" />
O que pode ser ?!
Eu faço assim com outra datagrid e funciona.
Valeu!
Este objeto que você recebe é de que tipo? Dependendo do tipo, tudo que tu precisa fazer é usar ele como dataProvider.
De qualquer maneira, utilize um ArrayCollection como dataprovider, e não um array.
[quote=wagnerfrancisco]Este objeto que você recebe é de que tipo? Dependendo do tipo, tudo que tu precisa fazer é usar ele como dataProvider.
De qualquer maneira, utilize um ArrayCollection como dataprovider, e não um array.[/quote]
O objeto é um array que vem de uma função php.
Eu tinha tentado faze o seguinte:
var listaAux:ArrayCollection = new ArrayCollection(lista.result);
pptsLista.dataProvider = listaAux;
Se não me engano foi isso que fiz e tbm não dava certo !(não to com o fonte aqui!)
Tava certo desse jeito que eu tinha feito anteriormente ??
Valeu!
Tá certo sim.
Procura ver se o array realmente foi carregado!
[quote=wagnerfrancisco]Tá certo sim.
Procura ver se o array realmente foi carregado![/quote]
Ele retorna os valores pois eu dei um Alert.show() dentro do for durante os testes.
Não sei se é importante, mas pelo que lembro estou montando o array no php assim:
// é +- assim!
$retorno = array();
while($dados = mysql_fetch_array($consulta))
{
$retorno[] = array(ppt=>$dados[0]);
}
return $retorno;
Sera que ta certo a forma que montei o array ?!
Valeu!
Você está executando com o flash player debugger? Ele vai exibir se houver algum erro, fica mais fácil.
De qualquer maneira eu checaria se você realmente recebeu um array. Algo assim:
var isArray:Boolean = lista.result instanceof Array;
Alert.show("eh array: " + isArray);
var listaAux:ArrayCollection = new ArrayCollection(lista.result);
pptsLista.dataProvider = listaAux;
[quote=wagnerfrancisco]Você está executando com o flash player debugger? Ele vai exibir se houver algum erro, fica mais fácil.
De qualquer maneira eu checaria se você realmente recebeu um array. Algo assim:
[code]
var isArray:Boolean = lista.result instanceof Array;
Alert.show("eh array: " + isArray);
var listaAux:ArrayCollection = new ArrayCollection(lista.result);
pptsLista.dataProvider = listaAux;
[/code][/quote]
Retorno TRUE, ou seja, é array, mas mesmo assim não insere
O debug não funciona com esse meu sistema pois ele é um sistema de streaming e da erro quando tento debugar, só em sistemas sem streaming de dados que ele funciona.
Tem mais alguma ideia de como posso tentar resolver ?!
Valeu!
Caramba, acho que encontrei o problema, só não sei direito como resolver
O problema é o seguinte!
O dataGrid esta dentro de um navigatorCOntent que esta dentro de um tabNavigator. Com o datagrid fora do navigatorContent eu consigo inserir os dados da datagrid mas dentro dele eu não consigo.
Sabe o pq disso e como resolver ??
Minha primeira ideia para resolver isso foi adicionar um id para o tabNavigator e para o navigatorContent e tentar fazer algo assim:
idTabNav.idNavCont.idDtGrid = dados;
Como não sou experiente no Flex, eu não tenho certeza de que vai funcionar ou de qual a melhor maneira de fazer isso,… se puderem me ajudar!
Só pra vcs verem como esta o código desse tabNavigator:
<mx:TabNavigator right="10" top="10" width="488" height="355" id="controles">
<s:NavigatorContent width="100%" height="100%" label="Config. de conferencia">
<mx:Label left="6" top="11" color="#0B333C" fontWeight="bold"
text="Volume do microfone:"/>
<mx:HSlider id="_slidesVolume" width="194"
allowTrackClick="true" liveDragging="true"
minimum="0" maximum="100"
snapInterval="1" tickInterval="1"
value="50"
top="10" height="18" horizontalCenter="24" thumbRelease="{mic.gain=_slidesVolume.value}"/>
<s:NavigatorContent width="100%" height="311" label="Config. de conferencia">
<mx:Button left="9" top="37" width="345" label="Configurar audio e video" click="config()"/>
<mx:Button left="9" top="70" width="345" label="Iniciar chat privado" click="iniChatPriv(this.id_usuario, datagridUsuarios.selectedItem.idUsuario)"/>
</s:NavigatorContent>
<s:Button x="880" y="114" width="344" label="Iniciar chat privado"/>
<s:Button x="880" y="114" width="344" label="Iniciar chat privado"/>
</s:NavigatorContent>
<s:NavigatorContent width="100%" height="100%" label="Arquivos">
<!-- <mx:DataGrid id="pptsLista" x="11" y="6" width="259" height="201" alternatingItemColors="[#F7F7F7, #FFFFFF]" /> -->
<s:Button x="10" y="218" label="Compartilhar PPT selecionado"
enabled="{pptsLista.selectedItem != null}"
click="iniciaPPT()" />
<mx:DataGrid id="pptsLista" x="16" y="11" width="385" height="199"
alternatingItemColors="[#F7F7F7, #FFFFFF]" enabled="true"/>
</s:NavigatorContent>
<s:NavigatorContent width="100%" height="100%" label="Administrador">
<mx:Button left="10" top="6" width="275" height="21" label="Banir usuario selecionado"
click="banirUsuario()"/>
<mx:Button left="10" top="35" width="275" height="21" label="Ativar/Desativar som do usuario"
click="somUsuario()"/>
</s:NavigatorContent>
</mx:TabNavigator>
O dataGrid é o do id pptsLista.
Obrigado!
Cara, o id do componente é da página. Mesmo que ele esteja dentro do navigator content você pode acessá-lo normalmente.
O seu problema, provavelmente, é relativo à inicialização da grid. Como você tem um tabNavigator, o flex, por padrão, só vai inicializar os componentes das abas não visíveis quando elas forem acessadas. Se você acessasse a aba e depois executasse o código que carrega a grid, provavelmente funcionaria. Mas claro que isso não deve ser concebível no teu caso, então a sugestão é inicializar todas as abas. Sete a propriedade creationPolicy para all no seu tabNavigator:
<mx:TabNavigator right="10" top="10" width="488" height="355" id="controles" creationPolicy="all">
Vamos ver se isso funciona. :lol:
[quote=wagnerfrancisco]Cara, o id do componente é da página. Mesmo que ele esteja dentro do navigator content você pode acessá-lo normalmente.
O seu problema, provavelmente, é relativo à inicialização da grid. Como você tem um tabNavigator, o flex, por padrão, só vai inicializar os componentes das abas não visíveis quando elas forem acessadas. Se você acessasse a aba e depois executasse o código que carrega a grid, provavelmente funcionaria. Mas claro que isso não deve ser concebível no teu caso, então a sugestão é inicializar todas as abas. Sete a propriedade creationPolicy para all no seu tabNavigator:
<mx:TabNavigator right="10" top="10" width="488" height="355" id="controles" creationPolicy="all">
Vamos ver se isso funciona. :lol: [/quote]
Coisas do Flex, tenho que me acostumar!
Mas como eu estava com pressa pois o sistema é para apresentar no tcc(rsrsrr) eu acabei fazendo de outra forma que descobri aqui!
// adicionei o dataProvider direto
<mx:DataGrid id="pptsLista" x="16" y="11" width="385" height="199" alternatingItemColors="[#F7F7F7, #FFFFFF]" enabled="true" dataProvider="{this.listaPpt}" />
Dessa forma, quando a função é executada ela seta o array para a variavel global listaPpt que esta sendo usada no dataGrid.
Mas vou testar depois da forma que vc coloco ai tbm, parace ser mais ‘certo’ !!
Valeu pela ajuda cara, vc ajudo pra caramba!
Falow!