Recuperando valor selecionado em uma Datawindow Child
Overview
Bem-vindo ao mundo do PowerBuilder, onde as Datawindow Childs podem ser suas melhores amigas para criar interfaces dinâmicas e interativas! Neste post, você vai aprender, de forma simples e objetiva, a acessar o valor selecionado em uma DDLB (dropdown listbox) usando uma Datawindow Child. Junte-se a mim nessa aventura e torne-se um mestre na recuperação de dados e na criação de listas dinâmicas!
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.