Páginas filhas
  • LGX - Controlar edição de informações no GRID


Para controlar quando o usuário pode ou não editar o conteúdo de determinadas células em um GRID é possível fazer uso de uma função 4GL que é definida para ser invocada a partir do evento BEFORE_EDIT_ROW.


Exemplo
DEFINE m_table_reference VARCHAR(10)

### Na função acionada no evento AFTER_LOAD do formulário deve-se definir a função que será acionada na tentativa de editar alguma célula de um GRID
#----------------------------------------------#
 FUNCTION <programa>_after_load
#----------------------------------------------#
    DEFINE l_table_reference VARCHAR(10)

    # Recupera a referência do GRID DO formulário.
    LET m_table_reference = _ADVPL_get_property(m_form_reference,"TABLE_REFERENCE","<tabela_grid>")

    # Definir evento para restringir edição de células no GRID (BEFORE_EDIT_ROW) utilizando a referencia do GRID 
    CALL _ADVPL_set_property(m_table_reference,"BEFORE_EDIT_ROW","<programa>_<tabela_grid>_before_edit_row")

    RETURN TRUE
 END FUNCTION

### Na função definida para o gatilho BEFORE_EDIT_ROW do grid deve-se incluir a lógica desejada para restringir edição das células do GRID.
### O evento BEFORE_EDIT_ROW será acionado em toda tentativa de iniciar a edição de uma célula de um GRID.
#----------------------------------------------------#
 FUNCTION <programa>_<tabela_grid>_before_edit_row()
#----------------------------------------------------#
    DEFINE l_column_name  CHAR(50)
    DEFINE l_row_selected SMALLINT    

    # Recupera o nome da coluna e a linha atual do GRID.
    LET l_column_name  = _ADVPL_get_property(m_table_reference,"COLUMN_NAME")
    LET l_row_selected = _ADVPL_get_property(m_table_reference,"ROW_SELECTED")    

    IF l_row_selected = 1 THEN
        CALL LOG_show_status_bar_text(<form_reference>,"Os dados da linha 1 não podem ser editados".","WARNING_TEXT")
        RETURN FALSE ### Não permite edição no GRID

    IF l_column_name = "<nome_coluna_grid>" THEN
        CALL LOG_show_status_bar_text(<form_reference>,"Este dado não pode ser editado".","WARNING_TEXT")
        RETURN FALSE ### Não permite edição no GRID
    END IF

    RETURN TRUE ### Permite ação de edição no GRID
 END FUNCTION


O exemplo acima mostra um exemplo que não permite editar dados da linha 1 do GRID e nem tampouco editar uma determinada coluna, independente da linha.

Em caso de emitir mensagens de alerta ao usuário neste evento, evitem usar funções de mensagens que abrem telas para que o usuário tenha que clicar em OK para fechar a tela de mensagem. Para mensagens tente usar o alerta na barra de status usando a função LOG_show_status_bar_text(<form_reference>,<mensagem>,<WARNING_TEXT ou ERROR_TEXT>).