Listar dados de uma tabela em um combo-box

Discussão em 'Progress 4GL' iniciado por ueluis, Outubro 25, 2011.

  1. ueluis

    ueluis Membro Participativo

    Galera,

    tenho uma tabela com dois campos codigo e nome, alguém teria um exemplo de como listar o campo nome no combo-box.
    E ao selecionar uma das opções do combo-box eu retornar o código referente ao nome cadastrado na tabela.
  2. lima

    lima Membro Participativo

    Amigo,

    voce tem que usar a opção list-item-pairs, conforme exemplo abaixo:


    ASSIGN cb-teste:LIST-ITEM-PAIRS IN FRAME fPage0 = "item1" + "," + "1" + "," + "item2" + "," + "2".

    Onde, "item1" seria o campo A da sua tabela e o "1" seria o campo B da sua tabela. Observe que sempre tem que estar separado por ",".

    Espero ter ajudado.
  3. ueluis

    ueluis Membro Participativo

    lima obrigado pela dica,

    está dando erro ao adicionar os dados, abaixo um exemplo do que preciso quem puder dar uma olhada agradeço!

    Código:
    
    
    /* definindo variaveis*/
    define VARIABLE cb-teste as character 
    view-as COMBO-BOX SIZE 30 BY 29. 
    DEF VAR vcodigo AS CHAR.
    DEF VAR vnome AS CHAR.
    DEF VAR cont AS INT.
    DEF VAR selecao-cod as  CHAR.
    
    /*definindo tabela temporária*/
    
    DEF TEMP-TABLE  tt-item-vip
        FIELD codigo AS INT
        FIELD nome AS CHAR.
    
    /*eliminando tabela temporária*/
    
    FOR EACH tt-item-vip:
        DELETE tt-item-vip.
    END.
    /* povoando tabela temporária*/
    DO WHILE cont <= 10:
        
        CREATE tt-item-vip.
        
        ASSIGN 
            cont = cont + 1
            tt-item-vip.codigo = cont
            tt-item-vip.nome = "Item" + STRING(cont).
    END.
    
    
    /* criando formulário p/ combo-box*/
    
    FORM cb-teste WITH FRAME fpage SIZE 60 BY 5 .
    
    /* listando itens cadastrados*/
    
    FOR EACH tt-item-vip NO-LOCK:
    
    DISP
        string(tt-item-vip.codigo) tt-item-vip.nome .
    
    /* povoando combo-box.*/
    
    ASSIGN 
            vnome   = vnome + tt-item-vip.nome + "," 
            vcodigo = vcodigo + string(tt-item-vip.codigo) + ","
            cb-teste:LIST-ITEM-PAIRS IN FRAME fPage = vnome + "," + vcodigo.
    END.
    
    
    
    REPEAT:
    
        UPDATE cb-teste WITH FRAME fpage.
    
        ASSIGN selecao-cod = cb-teste.
    
        DISP cb-teste selecao-cod WITH FRAME fpage.
    
    END.
    
    
    
    
  4. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Veja assim


    Código:
    
        /* definindo variaveis*/
        define VARIABLE cb-teste as character
        view-as COMBO-BOX SIZE 30 BY 29.
        DEF VAR vcodigo AS CHAR.
        DEF VAR vnome AS CHAR.
        DEF VAR cont AS INT.
        DEF VAR selecao-cod as  CHAR.
    
        /*definindo tabela temporária*/
    
        DEF TEMP-TABLE  tt-item-vip
            FIELD codigo AS INT
            FIELD nome AS CHAR.
    
        /*eliminando tabela temporária*/
    
        FOR EACH tt-item-vip:
            DELETE tt-item-vip.
        END.
        /* povoando tabela temporária*/
        DO WHILE cont <= 10:
           
            CREATE tt-item-vip.
           
            ASSIGN
                cont = cont + 1
                tt-item-vip.codigo = cont
                tt-item-vip.nome = "Item" + STRING(cont).
        END.
    
    
        /* criando formulário p/ combo-box*/
    
        FORM cb-teste WITH FRAME fpage SIZE 60 BY 5 .
    
        /* listando itens cadastrados*/
    
        FOR EACH tt-item-vip NO-LOCK:
    
        DISP
            string(tt-item-vip.codigo) tt-item-vip.nome .
    
        /* povoando combo-box.*/
    
        ASSIGN
                vnome   = vnome + tt-item-vip.nome + "," + string(tt-item-vip.codigo) + ","
                .
        END.
    
    
    ASSIGN cb-teste:LIST-ITEM-PAIRS IN FRAME fPage = substring(vnome,1,LENGTH(vnome) - 1).
    
        REPEAT:
            UPDATE cb-teste WITH FRAME fpage.
    
            ASSIGN selecao-cod = cb-teste .
    
            DISP cb-teste selecao-cod WITH FRAME fpage.
    
        END.
    
  5. ueluis

    ueluis Membro Participativo

    funcionou perfeitamente!!

    obrigado mais uma vez galera!!

    isto vai me economizar um tempo gigante!!!

    vlw mesmo.

    abç a todos.
  6. LFBuozi

    LFBuozi Membro Participativo

    Sei que é tarde, mas fiz alguns testes e achei outra forma de fazer, caso o número de registros deixe a string do list-item-pairs muito grande, então usei o combo:add-last().
    Código:
    /* definindo variaveis*/
    define VARIABLE cb-teste as character view-as COMBO-BOX SIZE 30 BY 29.
    DEF VAR vcodigo AS CHAR.
    DEF VAR vnome AS CHAR.
    DEF VAR cont AS INT.
    DEF VAR selecao-cod as  CHAR.
    
    /*definindo tabela temporária*/
    
    DEF TEMP-TABLE  tt-item-vip
        FIELD codigo AS INT
        FIELD nome AS CHAR.
    
    /*eliminando tabela temporária*/
    
    FOR EACH tt-item-vip:
        DELETE tt-item-vip.
    END.
    /* povoando tabela temporária*/
    DO WHILE cont <= 10:
       
        CREATE tt-item-vip.
       
        ASSIGN
            cont = cont + 1
            tt-item-vip.codigo = cont
            tt-item-vip.nome = "Item" + STRING(cont).
    END.
    
    
    /* criando formulário p/ combo-box*/
    
    FORM cb-teste WITH FRAME fpage SIZE 60 BY 5 .
    
    /* listando itens cadastrados*/
    
    ASSIGN cb-teste:LIST-ITEM-PAIRS IN FRAME fPage = ",". /* linha em branco necessárias para não ter erro ao popular combo-box */
    cb-teste:DELETE(""). /* apagar a linha em branco criada antes */
    
    FOR EACH tt-item-vip NO-LOCK:
    
    DISP
        string(tt-item-vip.codigo) tt-item-vip.nome .
    
    /* povoando combo-box.*/
    
        cb-teste:ADD-LAST(tt-item-vip.nome, STRING(tt-item-vip.codigo)).        
        
    END.
    
    ASSIGN cb-teste:INNER-LINES = 10. /* Define o tamanho da lista do combo por linhas ao abrir */
    
    REPEAT:
        UPDATE cb-teste WITH FRAME fpage.
    
        ASSIGN selecao-cod = cb-teste .
    
        DISP cb-teste selecao-cod WITH FRAME fpage.
    
    END.
    
    

Compartilhe esta Página