PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 25 → Como dar uma carga em um combo no Windev e Webdev
Como dar uma carga em um combo no Windev e Webdev
Started by Boller, Mar., 26 2025 7:11 PM - No answer
Registered member
3,797 messages
Posted on March, 26 2025 - 7:11 PM
Boa tarde

Tudo bem com vcs?

Vou criar dois exemplos detalhados e criativos de como carregar um controle Combo no WinDev e WebDev usando gLink, perfeitos para um treinamento de novos usuários.

Vamos lá!

Exemplo 1:
Carregando um Combo com Filiais e Códigos (WinDev)

Imagine que você está desenvolvendo um sistema para uma rede de pizzarias intergalácticas. Cada filial tem um código único, e o usuário precisa selecionar a filial pelo nome (ex.: “Terra” ou “Marte”), mas o sistema deve usar o código internamente para processar pedidos de pizza espacial.
Código

// Procedure: CarregaComboFiliais - Carrega o Combo com nomes de filiais e seus códigos via gLink

Procedure CarregaComboFiliais()

// Simulando dados de filiais (em um sistema real, viria de um banco de dados)
filiais is array of strings = ["001 - Terra", "002 - Marte", "003 - Júpiter"]
codigos is array of ints = [1, 2, 3]

// Limpando o Combo antes de carregar
ComboFilial.DeleteAll()

// Carregando o Combo com gLink
FOR i = 1 TO filiais..Count
ListAdd(ComboFilial, filiais[i] + gLink(codigos[i]))
END



// Selecionando a primeira filial por padrão
ComboFilial..Value = ComboFilial[1]

Info(ComboFilial..Value)


Explicação Detalhada
• Procedure CarregaComboFiliais: Define o nome da procedure e sua função.
• filiais e codigos: Arrays simulando dados. Em um sistema real, você substituiria isso por uma query como HExecuteQuery.
• ComboFilial.DeleteAll(): Limpa o Combo para evitar duplicatas ou dados antigos.
• FOR i = 1 TO filiais..Count: Loop que percorre os arrays.
• ListAdd(...): Adiciona cada filial ao Combo, concatenando o nome com o código via gLink, que associa o código “escondido” ao item visível.
• ComboFilial..Value: Define o primeiro item como padrão para facilitar a vida do usuário.


Como Usar
Chame CarregaComboFiliais() no evento “Inicialização” da janela.



Exemplo 2:

Carregando um Combo com Produtos e IDs (WebDev)
Cenário Criativo
Você está criando um site de e-commerce para vender gadgets tecnológicos. Cada produto tem um ID único, e o usuário seleciona o produto pelo nome (ex.: “Drone X”), mas o sistema usa o ID para adicionar ao carrinho.

Código

// Procedure: CarregaComboProdutos - Carrega o Combo com nomes de produtos e seus IDs via gLink

Procedure CarregaComboProdutos()

// Supondo uma query que busca produtos
HExecuteQuery("SELECT ID, Nome FROM Produtos", "Produtos")

// Limpando o Combo
ComboProduto.DeleteAll()

// Carregando o Combo com gLink
HReadFirst("Produtos")
WHILE NOT HOut("Produtos")
ListAdd(ComboProduto, HRead("Produtos").Nome + gLink(HRead("Produtos").ID))
HReadNext("Produtos")
END

// Fechando a query
HClose("Produtos")

// Selecionando o primeiro produto por padrão
IF ComboProduto..Count > 0 THEN
ComboProduto..Value = ComboProduto[1]
END

Explicação Detalhada
• HExecuteQuery(...): Executa uma query para buscar produtos no banco de dados.
• ComboProduto.DeleteAll(): Limpa o Combo antes de carregar novos dados.
• HReadFirst e WHILE NOT HOut: Loop que percorre os registros da query.
• ListAdd(...): Adiciona o nome do produto ao Combo e associa o ID com gLink.
• HClose("Produtos"): Libera a query da memória (boa prática!).
• IF ComboProduto..Count > 0: Só define um valor padrão se houver itens no Combo.

Como Usar

Chame CarregaComboProdutos() no evento “Inicialização” da página.

Recuperando o Valor Selecionado com `gLink`
Agora, vamos mostrar como pegar o valor associado ao item selecionado, adaptando o exemplo da query do usuário.

Código

// Procedure: ObtemCodigoSelecionado - Obtém o código selecionado via gLink

Procedure ObtemCodigoSelecionado()

// Pegando o índice selecionado
indice is int = ComboFilial..Selected

// Obtendo o código via gLink
codigo is int = gLink(ComboFilial[indice])

// Pegando o valor exibido (ex.: "001 - Terra")
valorExibido is string = ComboFilial..DisplayedValue

// Exemplo: Extraindo o "001" do valor exibido

// aqui está o segredo o pulo do gato!

filial is string = ExtractString(valorExibido, 1, " - ", FromBeginning)



// Exibindo os resultados
Info("Filial: " + filial + " | Código: " + codigo)



Explicação Detalhada
• ComboFilial..Selected: Retorna o índice do item selecionado (começa em 1).
• gLink(ComboFilial[indice]): Extrai o valor “escondido” associado ao item (o código).
• ComboFilial..DisplayedValue: Pega o texto visível no Combo (ex.: “001 - Terra”).
• ExtractString(...): Divide o texto exibido em partes, pegando o primeiro trecho antes do “ - “ (ex.: “001”).
• Info(...): Mostra o resultado para o usuário.
Adaptação ao Exemplo do Usuário
No seu exemplo:
ListAdd(ComboArmazemEmpreteiraNF, dsSelect.COD_FILIAL_TOTVS + " - " + dsSelect.NOME_EMPREITEIRA + gLink(dsSelect.COD_EMPREITEIRA))
• Para recuperar o código da empreiteira:
codigoEmpreiteira is int = gLink(ComboArmazemEmpreteiraNF[ComboArmazemEmpreteiraNF..Selected])

• Para pegar a filial exibida:
filialDestino is string = ExtractString(ComboArmazemEmpreteiraNF..DisplayedValue, 1, " - ", FromBeginning)
• Info("Filial destino: " + filialDestino)


Boas Práticas
1 Limpe o Combo antes de carregar: Use DeleteAll() para evitar duplicatas.
2 Defina um valor padrão: Melhora a usabilidade.
3 Feche queries: Use HClose() em WebDev para liberar recursos.
4 Teste o gLink: Certifique-se de que o controle suporta valores associados.

Espero que esses exemplos sejam úteis para o seu treinamento!

Se precisar de mais detalhes ou quiser adaptar algo, é só avisar. Um abraço!

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/