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.
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022