grid em web panels

612 views
Skip to first unread message

Gert Zimmermann

unread,
Apr 27, 2009, 10:26:29 AM4/27/09
to GUG Porto Alegre, xe...@gxtech.com.uy
Amigos,

preciso de uma grid de variáveis, em uma web panel, para que o usuário digite uma série de informações em várias linhas, que depois seriam recuperadas pelo "for each line".
No entanto, mesmo tendo um evento com o for each line, NENHUMA linha é habilitada quando executo a web panel!

Também não encontrei um método de adicionar novas linhas...

O que posso estar fazendo errado?

--
[]'s
Greg
------------------------
Gert Zimmermann
(54)9995-4623

paulo_rga

unread,
Apr 27, 2009, 12:41:22 PM4/27/09
to GUG Porto Alegre/Brasil
Olá Greg, tudo bem?

Você está utilizando o evento Load do grid: Event Grid_Clt.Load ,
para carregar as linhas?

Creio que uma solução que fica legal de encontro com o que você deseja
fazer é utilizar um SDT collection, e usar diretamente a variavável
SDT com a estrutura da collection no grid. Facilitará inclusive no
momento de adicionar uma nova linha.

Um abraço
Paulo Renato Godinho Amaral

Gert Zimmermann

unread,
Apr 27, 2009, 12:50:04 PM4/27/09
to gugportoal...@googlegroups.com
Oi Paulo,

acontece que não tenho nada para carregar no evento load!!
A idéia é uma grid vazia, onde o usuario vai introduzindo as informações, e no final, algum evento vai manipular essas informações, entendeu?
Algo semelhante a digitação de dados em modo batch...

Greg

2009/4/27 paulo_rga <paul...@hotmail.com>

Nataniel Strack

unread,
Apr 27, 2009, 1:02:44 PM4/27/09
to gugportoal...@googlegroups.com

Greg,

 

Em win basta ter o grid com as variáveis para conseguir o comportamento que você descreveu, porém em web é necessário “instanciar” as linhas.

Neste caso, funciona conforme o Paulo falou, e você faria um for “vazio” no load só para carregar a quantidade de linhas desejadas.

Exemplo:

Event Grid1.Load

       for &i = 1 to 10

             Grid1.Load()

       endfor

EndEvent

 

No teste que eu fiz, funcionou bem. Inclusive utilizando o valor das variáveis no for each line in grid1  do evento enter.

Porém, após cada execução de evento o conteúdo do grid é apagado (na verdade ele é sobre-escrito pelas linhas vazias carregadas no load).

 

Dessa maneira, acredito que a sugestão do Paulo de usar SDT é a melhor alternativa para este caso.

 

Atenciosamente,

 

Nataniel Strack nst...@trevisantecnologia.com.br

Tel/Fax +55 51 3396-4261 - Porto Alegre/RS - Brasil

Trevisan Tecnologia Ltda. http://www.trevisantecnologia.com.br

Soluções Móveis e de Gestão Empresarial

Gert Zimmermann

unread,
Apr 27, 2009, 1:22:23 PM4/27/09
to gugportoal...@googlegroups.com
Nataniel,

obrigado pelas dicas.
Tinha terminado de fazer esses testes quando vi teu e-mail, e cheguei aos mesmos resultados...
Vou fazer os testes com uma SDT agora...

Abraço,

Greg

2009/4/27 Nataniel Strack <nst...@trevisantecnologia.com.br>

Gert Zimmermann

unread,
Apr 27, 2009, 1:50:14 PM4/27/09
to gugportoal...@googlegroups.com

Amigos,

criei a SDT:

Leituras (colletion=sim)
 - LeiturasItem
     Inscricao n(7)
     Contador n(7)

Inseri a Grid tendo como base essa SDT, e indiquei a propriedade ReadOnly dos campos para "false".
inseri uma "linha" na SDT, no evento start:
&Leituras.Add(&LeiturasItem)
&LeiturasItem = new Leituras.LeiturasItem()

Dessa forma, a grid inicia com uma linha e aceita digitação.
Beleza!!

E como faço para acrescentar linhas na grid, mantendo os dados já inseridos?

NBDiego

unread,
Apr 27, 2009, 1:57:32 PM4/27/09
to gugportoal...@googlegroups.com
Gert,
 
Voce pode por exemplo, salvar o SDT em uma WebSession...
depois no start recarregar o SDT novamente e inserir as linhas...
ou colocar em um SDT auxiliar...
Algo assim.....
 
Mas ao repedir o procedimento de inserir as linhas ele esta perdendo as informações???
 
&Leituras.Add(&LeiturasItem)
&LeiturasItem = new Leituras.LeiturasItem()

Diego Lucena Machado
Analista Sênior Genexus
2009/4/27 Gert Zimmermann <greg...@gmail.com>


--

Gert Zimmermann

unread,
Apr 27, 2009, 2:08:21 PM4/27/09
to gugportoal...@googlegroups.com
Diego,

na verdade não sei como acrescentar linhas nessa grid em tempo de execução!!

Greg

2009/4/27 NBDiego <nbd...@gmail.com>

Fernando Gustavo Flôres

unread,
Apr 27, 2009, 2:14:36 PM4/27/09
to gugportoal...@googlegroups.com
Gert, e se criares um botão ou algum evento que faça:

um New no item?

event "imagem.click"

&LeiturasItem = new Leituras.LeiturasItem()

Endevent

?

2009/4/27 Gert Zimmermann <greg...@gmail.com>



--
Flôres, Fernando Gustavo
Analista Sênior GeneXus
DelSoft Sistemas
Linux User 384457
+55 47 8834.6540
Rio do Sul/SC
http://www.delsoftsistemas.com.br

{São Judas Tadeu, rogai por nós}

Gert Zimmermann

unread,
Apr 27, 2009, 2:21:14 PM4/27/09
to gugportoal...@googlegroups.com
Fernando,

fiz o que você sugeriu...
Não surtiu efeito nenhum na Grid!!

Greg

2009/4/27 Fernando Gustavo Flôres <fgustav...@gmail.com>

NBDiego

unread,
Apr 27, 2009, 2:23:36 PM4/27/09
to gugportoal...@googlegroups.com
Gert,
 
Assim que puder irei realizar um teste aqui...
 
Só um momento...
ou se vc puder mandar o XPZ do que esta fazendo ja ajuda um pouco tb...

2009/4/27 Gert Zimmermann <greg...@gmail.com>


--

Leonardo Toller

unread,
Apr 27, 2009, 1:07:05 PM4/27/09
to gugportoal...@googlegroups.com
Boa tarde Gert,

Provavelmente o seu grid está iniciando com apenas uma linha e com todas as variáveis desabilitadas, independente de quantas linhas você setou no rows do grid, correto?

- Primeiramente, no evento start, você deve setar para todas as variáveis que estão no grid, &var.enable = 1.
- Insira uma variável numérica (de preferência invisível) no seu grid.
- No evento Load, deve por um for para a quantidade de linhas vazias que deseja ter no grid, como no exemplo a seguir:
Event Load
    for &var = 0 to &rows (quantidade de linhas que deseja ter no grid)
        Load
    endfor
EndEvent  // Load

- Para que consiga adicionar novas linhas ao grid, deverá trabalhar com vetor ou sdt, tendo que popular a estrutura com as suas variavéis do grid para cada evento que seja disparado, caso contrário, seu grid ficará vazio novamente.
No evento Load deve popular novamente o seu grid com as variáveis armazenadas na estrutura (vetor ou sdt). Para adicionar novas linhas, deves criar um evento (disparado por botão ou label) que incrementa a variável que é usada no evento Load, como no exemplo abaixo:
Event 'AdicionaLinha'
    &rows += 5
    Grid2.Rows = &rows
    Do 'PopulaVetor' (Sub para popular o vetor com os elementos do Grid)
EndEvent  // 'AdicionaLinha'

Caso trabalhe com vetor não esqueça de inserir o mesmo na tela como invisível.

Não conheço nenhum outro método para usar grids com web panel, mas desse jeito funciona

Atenciosamente,

Leonardo M. Töller
SWINF - Software Warranty
(51) 9917.4780
(51) 3321.4077

NBDiego

unread,
Apr 27, 2009, 2:30:49 PM4/27/09
to gugportoal...@googlegroups.com
Gert,

Resolvi desta forma....
 
em anexo no XPZ

2009/4/27 Leonardo Toller <tol...@swinf.com.br>
SDTGRid.xpz

NBDiego

unread,
Apr 27, 2009, 2:31:12 PM4/27/09
to gugportoal...@googlegroups.com

Event Start
    &SdtGridItem = new SdtGridTeste.SdtGridTesteItem()
    &SdtGrid.Add(&SdtGridItem)
    &SdtGridItem = new SdtGridTeste.SdtGridTesteItem()
    &SdtGrid.Add(&SdtGridItem)
    &SdtGridItem = new SdtGridTeste.SdtGridTesteItem()
    &SdtGrid.Add(&SdtGridItem)
    &SdtGridItem = new SdtGridTeste.SdtGridTesteItem()
    &SdtGrid.Add(&SdtGridItem)

EndEvent  // Start

Event 'Adicionar'
    For &X = 1 to &QuantidadeLinhas
        &SdtGridItem = new SdtGridTeste.SdtGridTesteItem()
        &SdtGrid.Add(&SdtGridItem)
    endfor
EndEvent  // 'Adicionar'

2009/4/27 NBDiego <nbd...@gmail.com>

Gert Zimmermann

unread,
Apr 27, 2009, 2:57:51 PM4/27/09
to gugportoal...@googlegroups.com
Ok,

agora consigo adicionar linhas à Grid.
Porém, quando adiciono linhas, o que tinha sido digitado se perde!
Outra coisa: como tenho acesso ao que foi digitado?
Tentei "varrer" a SDT com um for, mas dá erro...

Greg

2009/4/27 NBDiego <nbd...@gmail.com>

NBDiego

unread,
Apr 27, 2009, 4:34:29 PM4/27/09
to gugportoal...@googlegroups.com
vc consolidou o XPZ que lhe enviei???
No meu teste as informações não foram perdidas....
 
para acessar os registros é:
 
 for &SDTITem in &SDTColecao
      ///navega em todos os registros do sdt
endfor
 


 
2009/4/27 Gert Zimmermann <greg...@gmail.com>

Gert Zimmermann

unread,
Apr 27, 2009, 4:43:59 PM4/27/09
to gugportoal...@googlegroups.com
Diego, desculpa se nao te dei retorno,
mas quando clico para adicionar linhas, o que tinha sido digitado se perde....
também nao consigo obter os dados pelo for. A propriedade COUNT vem zerada.....
estou utilizando a evl1, e você?

2009/4/27 NBDiego <nbd...@gmail.com>

Gert Zimmermann

unread,
Apr 27, 2009, 4:45:39 PM4/27/09
to gugportoal...@googlegroups.com
Leonardo,

tua dica é a que melhor está funcionando até o momento
Só tem um probleminha que não to conseguindo resolver: os dados da última linha da grid são perdidos!!
Estou usando a evl1, e o meu código é esse:


Event Start
    &Param.FromXml(&SessaoWeb.Get('Param'))
&NomeOpcao = &Param.ParamNomeOpcao
&Rows = 5
Grid1.Rows = &Rows
EndEvent  // Start

Event 'Fechar'
    Link(HMenu)
EndEvent  // 'Fechar'

Event 'Confirma'
// for each line
// &Resultado = &Resultado + ',' + str(&AguaInscricao) + ' ' + str(&LeituraContador)
// endfor
// do 'SubDescarrega'
EndEvent

Event 'Novo'
&Rows += 3
Grid1.Rows = &Rows
do 'SubDescarrega'
EndEvent

Event Load
&Quantidade = &Leituras.Count
for &i = 1 to &Quantidade
&LeiturasItem = &Leituras.Item(&i)
&AguaInscricao = &LeiturasItem.Inscricao
&LeituraContador = &LeiturasItem.Contador
load
endfor
for &i = &Quantidade + 1 to &Rows
load
endfor
EndEvent

Sub 'SubDescarrega'
&Leituras.Clear()
for each line
&LeiturasItem.Inscricao = &AguaInscricao
&LeiturasItem.Contador = &LeituraContador
&Leituras.Add(&LeiturasItem)
&LeiturasItem = new Leituras.LeiturasItem()
endfor
EndSub // SubDescarrega

Greg




2009/4/27 Leonardo Toller <tol...@swinf.com.br>

NBDiego

unread,
Apr 27, 2009, 7:32:14 PM4/27/09
to gugportoal...@googlegroups.com
Báh desculpa pessoal mandei o meu xpz na versão 9 do gx

2009/4/27 Gert Zimmermann <greg...@gmail.com>

Gert Zimmermann

unread,
Apr 28, 2009, 8:47:53 AM4/28/09
to gugportoal...@googlegroups.com
Pessoal,

Desisti da Evl1 e voltei para o GxX U4 preview 3

Nessa versão, a grid com SDT (exemplo do Diego) funciona perfeitamente.

Obrigado por todas as sugestões.

Greg



2009/4/27 NBDiego <nbd...@gmail.com>

Nataniel Strack

unread,
Apr 28, 2009, 8:47:04 AM4/28/09
to gugportoal...@googlegroups.com

Gert,

Obrigado pelo feedback.

 

Diego,

Podemos publicar o exemplo no blog?

 

Atenciosamente,

 

Nataniel Strack nst...@trevisantecnologia.com.br

Tel/Fax +55 51 3396-4261 - Porto Alegre/RS - Brasil

Trevisan Tecnologia Ltda. http://www.trevisantecnologia.com.br

Soluções Móveis e de Gestão Empresarial

 

De: gugportoal...@googlegroups.com [mailto:gugportoal...@googlegroups.com] Em nome de Gert Zimmermann
Enviada em: terça-feira, 28 de abril de 2009 09:48
Para: gugportoal...@googlegroups.com
Assunto: [gugportoalegrebrasil] Re: grid em web panels

 

Pessoal,

NBDiego

unread,
Apr 28, 2009, 8:53:06 AM4/28/09
to gugportoal...@googlegroups.com
sim, claro nataniel...
sem stress

2009/4/28 Nataniel Strack <nst...@trevisantecnologia.com.br>

paulo_rga

unread,
Apr 28, 2009, 4:02:46 PM4/28/09
to GUG Porto Alegre/Brasil
Belo trabalho de equipe!!!

On 28 abr, 09:53, NBDiego <nbdi...@gmail.com> wrote:
> sim, claro nataniel...
> sem stress
>
> 2009/4/28 Nataniel Strack <nstr...@trevisantecnologia.com.br>
>
>
>
>
>
> >  Gert,
>
> > Obrigado pelo feedback.
>
> > Diego,
>
> > Podemos publicar o exemplo no blog?
>
> > Atenciosamente,
>
> > Nataniel Strack nstr...@trevisantecnologia.com.br**
>
> > Tel/Fax +55 51 3396-4261 - Porto Alegre/RS - Brasil
>
> > Trevisan Tecnologia Ltda.http://www.trevisantecnologia.com.br
>
> > Soluções Móveis e de Gestão Empresarial
>
> > *De:* gugportoal...@googlegroups.com [mailto:
> > gugportoal...@googlegroups.com] *Em nome de *Gert Zimmermann
> > *Enviada em:* terça-feira, 28 de abril de 2009 09:48
> > *Para:* gugportoal...@googlegroups.com
> > *Assunto:* [gugportoalegrebrasil] Re: grid em web panels
>
> > Pessoal,
>
> > Desisti da Evl1 e voltei para o GxX U4 preview 3
>
> > Nessa versão, a grid com SDT (exemplo do Diego) funciona perfeitamente.
>
> > Obrigado por todas as sugestões.
>
> > Greg
>
> > 2009/4/27 NBDiego <nbdi...@gmail.com>
>
> > Báh desculpa pessoal mandei o meu xpz na versão 9 do gx
>
> > 2009/4/27 Gert Zimmermann <greg.t...@gmail.com>
> > - No evento Load, deve por um *for *para a quantidade de linhas vazias que
> > deseja ter no grid, como no exemplo a seguir:
> > Event Load
> >     for &var = 0 to &rows (quantidade de linhas que deseja ter no grid)
> >         Load
> >     endfor
> > EndEvent  // Load
>
> > - Para que consiga adicionar novas linhas ao grid, deverá trabalhar com
> > vetor ou sdt, tendo que popular a estrutura com as suas variavéis do grid
> > para cada evento que seja disparado, caso contrário, seu grid ficará vazio
> > novamente.
> > No evento Load deve popular novamente o seu grid com as variáveis
> > armazenadas na estrutura (vetor ou sdt). Para adicionar novas linhas, deves
> > criar um evento (disparado por botão ou label) que incrementa a variável que
> > é usada no evento Load, como no exemplo abaixo:
> > Event 'AdicionaLinha'
> >     &rows += 5
> >     Grid2.Rows = &rows
> >     Do 'PopulaVetor' (Sub para popular o vetor com os elementos do Grid)
> > EndEvent  // 'AdicionaLinha'
>
> > Caso trabalhe com vetor não esqueça de inserir o mesmo na tela como
> > invisível.
>
> > Não conheço nenhum outro método para usar grids com web panel, mas desse
> > jeito funciona
>
> > Atenciosamente,
>
> > *Leonardo M. Töller*
> Analista Sênior Genexus- Ocultar texto das mensagens anteriores -
>
> - Mostrar texto das mensagens anteriores -
Reply all
Reply to author
Forward
0 new messages