Recuperando valor selecionado em uma Datawindow Child

Geralmente, utilizamos as Datawindow Childs do PowerBuilder para criar listas (dropdown) dinâmicos, campos de filtro e quando queremos carregar informações de uma lista a partir da seleção de outra. Exemplo: Carregar as cidades após após o usuário selecionar o Estado.  Neste post mostro um exemplo simples de como acessar o valor selecionado.

Para este exemplo, vou partir do seguinte cenário:

  • O objeto SQLCA está válido;
  • Temos o controle DW_1, que possui um campo chamado nom_cidade, que é uma DDLB (dropdown listbox).

Nosso objetivo é conseguir recuperar o valor selecionado neste campo.

Primeiro, precisamos declarar e “instanciar” uma variável do tipo datawindowchild:

datawindowchild ldwc_cidade
long ll_ret

ll_ret = dw_1.GetChild("nom_cidade", ldwc_cidade)

if ll_ret < 0 then
    MessageBox("GetChild Error", "Deu ruim ao recuperar informações do campo cidade.", StopSign!)
    return
end if

ldwc_cidade.SetTrans(SQLCA)

Vamos fingir que você reparou que eu deixei a palavra instanciar entre aspas. Isso foi de propósito, pois este tipo de variável é AutoInstantiated, ou seja, o próprio PowerBuilder se encarrega do create e do destroy dela. (e faz isso até direitinho…na maioria das vezes.)

No comando GetChild do exemplo acima, se o retorno for 1, então conseguimos acesso a Datawindow Child (DWC). Isso já resolveu metade do problema.

Agora precisamos descobrir qual linha desta DWC foi selecionada. Faremos isso conforme o exemplo abaixo:

long ll_SelectedRow
string ls_NomCidade

ll_SelectedRow= ldwc_cidade.GetSelectedRow(0)

if ll_SelectedRow > 0 then 
    ls_NomCidade = ldwc_cidade.GetItemString(ll_SelectedRow, "nom_cidade")

    MessageBox("Cidade Selecionada:", "A Cidade selecionada foi: " + ls_NomCidade, Information!)
else
    MessageBox("Vazio", "Nenhuma cidade foi selecionada!", Information!)
end if

No exemplo acima, primeiro utilizamos o comando GetSelectedRow(n). Ele retorna o número da primeira linha selecionada, após o número informado no argumento, ou seja, se informarmos o valor 5, ele vai buscar a primeira linha selecionada, a partir da linha de número 5. Se passarmos 0 (zero), ele busca a primeira linha selecionada na Datawindow como um todo.

Se este número vier positivo (> 0), quer dizer que existe algo selecionado. Agora basta recuperar este valor. Para fazer isto, utilizamos o comando GetItemString, passando como argumento o número da linha selecionada (ll_SelectedRow) e o nome da coluna (nom_cidade).

Para sempre saber o que o usuário selecionou, esta lógica pode ser implementada no evento ItemChanged da DW_1.

Espero ter ajudado.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, PowerBuilder and tagged , , , , , , , , , .