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>).
Visão Geral
Import HTML Content
Conteúdo das Ferramentas