José,

Funcionou!
O código ficou dessa forma:

private function alertDg():void
{
     var ac:ArrayCollection = dg.dataProvider as ArrayCollection;
     var pmod:Pmod = ac.getItemAt(0) as Pmod;
     Alert.show(pmod.idPlan.toString());
}

Criei uma variável do tipo ArrayCollection, peguei o primeiro elemento dela,
dando um cast ao Pmod. E, por fim, dei um Alert pegando o atributo idPlan
que eu precisava.

Muito obrigado pela ajuda!

Airton Toyansk



2009/12/8 José Alexandre D'Abruzzo Pereira <[email protected]>

> Com a sua implementação, mesmo que retorne um único Pmod, ele está
> retornando num List<Pmod> de um único objeto.
>
> O flex entende o List como um ArrayCollection de um único objeto Pmod.
> Portanto é só pegar o primeiro elemento deste ArrayCollection, dar um cast
> para Pmod e pegar o atributo idPlan.
> Se você não quiser fazer o cast para Pmod, dá pra usar o hasProperty.
>
> Aí é só dar o Alert!
>
>
> 2009/12/8 Airton Toyansk <[email protected]>
>
>> Pois é, não deu certo...
>>
>> Seguem os códigos das classes:
>>
>> *AS (Pmod.as)*
>>
>> package com.radix.utils
>> {
>>     [RemoteClass(alias="Pmod.Pmod")]
>>
>>     public class Pmod
>>     {
>>         public static const NAMESPACE:String = "Pmod.Pmod";
>>
>>         public var idPlan:int;
>>
>>         public function Pmod()
>>         {
>>         }
>> }
>> }
>>
>> *C# (Pmod.cs)*
>> **Apenas o método que estou chamando**
>>
>> public List<Pmod> consDt()
>>         {
>>             StringBuilder sql = new StringBuilder();
>>             sql.Append("
>> SELECT                                                      ");
>>             sql.Append("
>> idPlan                                                  ");
>>             sql.Append("
>> FROM                                                        ");
>>             sql.Append("
>> Planejamento                                            ");
>>             sql.Append("
>> WHERE                                                       ");
>>             sql.Append("        idPlan=(SELECT MAX(idPlan) FROM
>> Planejamento)           "); //preciso apenas do id do último registro
>> inserido pelo usuário idUser_Plan (usando Access por enquanto)
>>             sql.Append("
>> AND                                                         ");
>>             sql.Append("        idUser_Plan =
>> 123456                                    "); //por enquanto estou pegando o
>> usuário estaticamente, pois também não consegui mandar o seu ID da
>> querystring dinamicamente
>>             OleDbConnection con = new OleDbConnection(_stringConexao);
>>             OleDbCommand cmd = new OleDbCommand(sql.ToString(), con);
>>             List<Pmod> lista = new List<Pmod>();
>>             con.Open();
>>             using (con)
>>             {
>>                 OleDbDataReader reader = cmd.ExecuteReader();
>>                 while (reader.Read())
>>                     lista.Add(new Pmod(reader));
>>             }
>>             return lista;
>>         }
>>
>> No arquivo MXML, faço os métodos do RemoteObject:
>>
>> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"; xmlns="*"
>> xmlns:ns1="flexlib.containers.*" width="100%" height="100%"
>> creationComplete="rMod.consDt()">
>> <mx:RemoteObject id="rMod" destination="fluorine" showBusyCursor="true"
>> source="Pmod.Pmod">
>>      <mx:method name="consDt" result="getDataR(event)"
>> fault="OnError(event)" />
>> </mx:RemoteObject>
>>
>> E, por fim, o getDataR:
>>
>> public function getDataR(e:ResultEvent):void
>> {
>>  dg.dataProvider = e.result as Object;
>> }
>>
>> Obrigado!
>>
>> Airton Toyansk
>>
>> 2009/12/8 José Alexandre D'Abruzzo Pereira <[email protected]>
>>
>>> Tenta colocar estes valores na URL que o flex usa. Não sei se funciona. É
>>> uma sugestão.
>>>
>>> Se não der, tenta postar as classes Pmod em C# e em AS. Pra ver se dá pra
>>> te ajudar de outra forma.
>>>
>>> []'s
>>>
>>>
>>> 2009/12/8 Airton Toyansk <[email protected]>
>>>
>>>> José,
>>>>
>>>> Não consigo debugar a aplicação. Motivo: estou usando querystring na url
>>>> para informar alguns dados de usuário (como um login), e gravar os dados
>>>> neste usuário. Acontece que a aplicação inicia sem estes dados, e tenho que
>>>> colocá-las manualmente no meu ambiente de teste (na publicação, estes dados
>>>> virão de outro sistema), e, quando dou refresh na página web, o debug
>>>> finaliza...
>>>>
>>>> Airton
>>>>
>>>>   2009/12/8 Airton Toyansk <[email protected]>
>>>>
>>>>> Sim, eu tenho esta classe, tb chamada de Pmod
>>>>> E nela eu tenho
>>>>> package Pmod {
>>>>>   [RemoteClass(alias="Pmod.Pmod")]
>>>>>
>>>>>   public class Pmod {
>>>>>     public var atributoX:Number;
>>>>>   }
>>>>> }
>>>>>
>>>>> Tentei ainda
>>>>> private function alertDg():void
>>>>> {
>>>>>
>>>>>      var pmod:Pmod = dg.dataProvider;
>>>>>      Alert.show(pmod.idPlan.toString()); // idPlan é o atributo que eu
>>>>> quero recuperar
>>>>> }
>>>>>
>>>>> E exibiu o seguinte erro:
>>>>> 1118: Implicit coercion of a valeu with static type Object to a
>>>>> possibly unrelated type com.radix.utils:Pmod.
>>>>>
>>>>> Vou debugar...
>>>>>
>>>>> Obrigado!
>>>>>
>>>>>
>>>>>
>>>>> 2009/12/8 José Alexandre D'Abruzzo Pereira <[email protected]>
>>>>>
>>>>>> A marcação seria algo como :
>>>>>>
>>>>>> package vo {
>>>>>>   [RemoteClass(alias="vo.Pmod")]
>>>>>>   public class Pmod {
>>>>>>     public var atributoX:Number;
>>>>>>   }
>>>>>> }
>>>>>>
>>>>>> sendo que você tem que substituir vo.Pmod pelo namespace completo da
>>>>>> sua classe no C#.
>>>>>>
>>>>>>
>>>>>> 2009/12/8 José Alexandre D'Abruzzo Pereira <[email protected]>
>>>>>>
>>>>>>> Como vc tá usando .net, dá pra vc ter uma classe Pmod no flex.
>>>>>>> É só marcar ela como sendo a mesma classe do .net.
>>>>>>>
>>>>>>> No alert, vc teria então:
>>>>>>>
>>>>>>> var pmod:Pmod = dg.dataProvider;
>>>>>>> Alert.show(pmod.atributo_que_vai_exibir);
>>>>>>>
>>>>>>> Algo assim... Isto ajuda, mas não é necessário. Se você debugar, já
>>>>>>> vai descobrir onde está errado.
>>>>>>>
>>>>>>>
>>>>>>> 2009/12/8 Airton Toyansk <[email protected]>
>>>>>>>
>>>>>>>> Tentei outra coisa.
>>>>>>>>
>>>>>>>> Inseri o seguinte código:
>>>>>>>> private function alertDg():void
>>>>>>>>
>>>>>>>> {
>>>>>>>>      var obj: Object = dg.dataProvider;
>>>>>>>>      Alert.show(obj.toString());
>>>>>>>> }
>>>>>>>>
>>>>>>>> E o Alert me exibiu a seguinte mensagem:
>>>>>>>> [object Pmod]
>>>>>>>>
>>>>>>>> Sendo que Pmod é o nome do meu source no RemoteObject (das classes
>>>>>>>> no Flex e no .Net).
>>>>>>>> É o mesmo resultado em usar
>>>>>>>> private function alertDg():void
>>>>>>>> {
>>>>>>>>      Alert.show(dg.dataProvider.toString());
>>>>>>>> }
>>>>>>>>
>>>>>>>> Isso ajuda a descobrir o que pode ser?
>>>>>>>>
>>>>>>>> Obrigado!
>>>>>>>>
>>>>>>>>   2009/12/8 José Alexandre D'Abruzzo Pereira <[email protected]>
>>>>>>>>
>>>>>>>>> Sem ver o código todo fica difícil de saber o que é.
>>>>>>>>>
>>>>>>>>> Debuga tanto o método result do remote quanto antes de exibir o
>>>>>>>>> alert. Às vezes a propriedade tem algum erro de digitação. Debugando 
>>>>>>>>> dá pra
>>>>>>>>> ver direito como está retornando do remote.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2009/12/8 Airton Toyansk <[email protected]>
>>>>>>>>>
>>>>>>>>>> Se insiro a verificação, não exibe Alert (e não dá erro).
>>>>>>>>>> Se comento o if, exibe o erro:
>>>>>>>>>> *Error: Unknown Property: 'X'*
>>>>>>>>>>
>>>>>>>>>> Ou seja, este objeto não tem o atributo X...
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 2009/12/8 José Alexandre D'Abruzzo Pereira <[email protected]>
>>>>>>>>>>
>>>>>>>>>> private function exibeX(): void {
>>>>>>>>>>>   var obj: Object = dg.dataProvider;
>>>>>>>>>>>   if (obj.hasProperty("X")) // Como ele retorna um object, é bom
>>>>>>>>>>> verificar se aquele objeto tem o atributo X.
>>>>>>>>>>>     Alert.show(obj["X"]); // isto é o equivalente a obj.X;
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>> 2009/12/8 Airton Toyansk <[email protected]>
>>>>>>>>>>>
>>>>>>>>>>>  E se eu carregar como um Object, dessa forma:
>>>>>>>>>>>> dg.dataProvider = e.result *as* Object;
>>>>>>>>>>>> Ele exibe no DataGrid do mesmo jeito. Mas como exibir no Alert
>>>>>>>>>>>> (estou com dificuldade mesmo sendo um objeto)?
>>>>>>>>>>>>
>>>>>>>>>>>> Obrigado!
>>>>>>>>>>>>
>>>>>>>>>>>> Airton Toyansk
>>>>>>>>>>>>
>>>>>>>>>>>> 2009/12/7 José Alexandre D'Abruzzo Pereira <[email protected]>
>>>>>>>>>>>>
>>>>>>>>>>>> Pode ser feito como vc fez. Aí na hora de dar o Alert é só fazer
>>>>>>>>>>>>> ArrayCollection(dg.dataProvider) e pegar o ArrayCollection e 
>>>>>>>>>>>>> indexa de zero.
>>>>>>>>>>>>> Vc vai ter um Object. Aí é só pegar a propriedade X do Object:
>>>>>>>>>>>>> obj.X ou obj["X"].
>>>>>>>>>>>>>
>>>>>>>>>>>>> Se vc recebe sempre um objeto, será que é necessário colocar
>>>>>>>>>>>>> num ArrayCollection? Não dá pra colocar direto num objeto? Isto 
>>>>>>>>>>>>> também acaba
>>>>>>>>>>>>> dependendo do retorno do seu método na sua linguagem server-side. 
>>>>>>>>>>>>> Se estiver
>>>>>>>>>>>>> retornando um ArrayList ou algo assim, tudo bem. Se estiver 
>>>>>>>>>>>>> retornando
>>>>>>>>>>>>> apenas um objeto, acho que não compensa colocar num 
>>>>>>>>>>>>> ArrayCollection.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Tem muitas formas de fazer o que você quer. Só que tem que
>>>>>>>>>>>>> escolher a melhor para deixar o swf mais leve e não sobrecarregar 
>>>>>>>>>>>>> o cliente
>>>>>>>>>>>>> =)
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2009/12/7 Airton Toyansk <[email protected]>
>>>>>>>>>>>>>
>>>>>>>>>>>>>  Na verdade, resolveria se este registro fosse exibido em um
>>>>>>>>>>>>>> TextInput. Mas não consegui carregá-lo num campo de texto no
>>>>>>>>>>>>>> creationComplete, só num DataGrid, dessa forma:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> public function getDataR(e:ResultEvent):void
>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>       dg.dataProvider = e.result as ArrayCollection;
>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Se estivesse num campo de texto, estaria resolvido mandar
>>>>>>>>>>>>>> para o Alert... Como posso fazer carregar num TextInput no 
>>>>>>>>>>>>>> método chamado no
>>>>>>>>>>>>>> result do RemoteObject?
>>>>>>>>>>>>>> Vou tentar também a opção no DataGrid.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Obrigado!
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Airton Toyansk
>>>>>>>>>>>>>> 2009/12/6 José Alexandre D'Abruzzo Pereira <[email protected]
>>>>>>>>>>>>>> >
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Se é apenas uma linha tem que ser um DataGrid para exibir
>>>>>>>>>>>>>>> estes valores?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> De qualquer forma, é só fazer no creationComplete da sua
>>>>>>>>>>>>>>> aplicação, um método que pegue a primeira posição do 
>>>>>>>>>>>>>>> dataProvider do
>>>>>>>>>>>>>>> DataGrid, pegar o atributo X e dar o Alert.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Se os dados estiverem vindo de um RemoteObject ou de um
>>>>>>>>>>>>>>> WebService, tem que ser no método chamdo no result destas 
>>>>>>>>>>>>>>> operações.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Se não der certo ainda, posta o seu código pra gente ver...
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2009/12/6 Airton Toyansk <[email protected]>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> @José,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Quero poder exibir logo que carrego a aplicação.
>>>>>>>>>>>>>>>> No meu datagrid, tenho apenas uma coluna e uma linha
>>>>>>>>>>>>>>>> (sempre). E quero exibir este valor no Alert assim que o 
>>>>>>>>>>>>>>>> usuário entre, ou
>>>>>>>>>>>>>>>> seja, sem selecionar o registro (por isso minha dificuldade, 
>>>>>>>>>>>>>>>> pq não posso
>>>>>>>>>>>>>>>> usar o selectedItem).
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Airton Toyansk
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2009/12/6 José Alexandre D'Abruzzo Pereira <
>>>>>>>>>>>>>>>> [email protected]>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Mas em qual momento você quer exibir o Alert?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Uma possibilidade seria no click da grid, selecionando uma
>>>>>>>>>>>>>>>>> linha. Aí neste método é só pegar dataGrid.selectedItem, que 
>>>>>>>>>>>>>>>>> retorna um
>>>>>>>>>>>>>>>>> Object. Este é o objeto que popula aquela linha do grid. Aí é 
>>>>>>>>>>>>>>>>> só acessa o
>>>>>>>>>>>>>>>>> atributo que popula a coluna X. Algo como:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> var obj: Object = dataGrid.selectedItem;
>>>>>>>>>>>>>>>>> Alert.show(obj.X);
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> 2009/12/6 Airton Toyansk <[email protected]>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>  Pessoal,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Existe alguma maneira de recuperar determinado dado de um
>>>>>>>>>>>>>>>>>> datagrid vindo de um BD e exibí-lo num Alert?
>>>>>>>>>>>>>>>>>> Algo como "exiba dado da coluna X e linha Y"?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Agradeço as respostas.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Airton Toyansk
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> José Alexandre D'Abruzzo Pereira
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> José Alexandre D'Abruzzo Pereira
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> José Alexandre D'Abruzzo Pereira
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> José Alexandre D'Abruzzo Pereira
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> José Alexandre D'Abruzzo Pereira
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>  José Alexandre D'Abruzzo Pereira
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> José Alexandre D'Abruzzo Pereira
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> José Alexandre D'Abruzzo Pereira
>>>
>>>
>>>
>>>
>>>
>
>
> --
> José Alexandre D'Abruzzo Pereira
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para 
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a