Browse/Grid com opção para selecionar registros e edição de célula

Boa tarde.

Preciso criar um browse/grid que permita ao usuário:

  • Marcar o Registro (estilo MarkBrowse), Ao marcar o registro, deverá validar (Se true, poderá marcar)
    • Editar uma célula através de um combobox. Ao selecionar, deverá validar a opção selecionada

Existe em advpl alguma classe ou objeto que cria este Browse/Grid?

Desde já, agradeço a atenção.

At Rodrigo de Oliveira.

Boa tarde Rodrigo, o grid do MVC já tem esse comportamento que você deseja, quando o campo é um combo, ele exibe o combo durante a alteração e quando trata-se de um campo lógico (boolean), ele exibe um checkbox. Você tem uma tabela que será utilizada para esse grid?

Daniel
Eu irei utilizar uma tabela temporária.
No MVC eu consigo usar uma grid, sem necessidade de um formulário (pai x filho)?

Boa noite, Rodrigo!

Usando o MsNewGetDados

Apesar de estar depreciada, ela irá lhe atender para essa customização.

Para funcionar, você deve definir um campo virtual do tipo @BMP como primeiro item do aHeader do GetDados, exemplo:


aAdd(_aHeader,{'Status','STATUS','@BMP', 2, 0, '.F.' , '', 'C', '', 'V', '', '', '', 'V'})

Ao instanciar a classe, informe o atributo blDblClick igual o exemplo abaixo, onde você irá editar a celula clicada (caso ela permitir a edição) através do método EditCell() e em seguida irá preencher o campo de marcação com a marcação correspondente. Nesse atributo, você pode criar uma função que valide de forma mais completa a marcação ou não, conforme a sua demanda.


oNewGet := MsNewGetDados():New(001, 001, 001, 001, GD_UPDATE, 'AllwaysTrue', 'AllwaysTrue', , {'ZMK_CODRAM'}, , 999, 'AllwaysTrue', , 'AllwaysTrue', oPanel, _aHeader, _aCols)
oNewGet:oBrowse:blDblClick := { || oNewGet:EditCell(), oNewGet:aCols[oNewGet:nAt,1] := IIf(oNewGet:aCols[oNewGet:nAt,1] == 'WFCHK','WFUNCHK','WFCHK') }

Por último, você também pode validar o preenchimento do combobox declarando uma User Function para o atributo cFieldOk da classe. Validando o campo editado e se a edição deve ou não ocorrer dependendo do registro e/ou ação.

Usando o MVC

Você também pode fazer esse procedimento usando o MVC do Protheus, criando as validações de marcação e edição pelos atributos bLinePre ou bLinePost do método AddGrid da classe MpFormModel. Nesse caso, o campo de marcação deve ser lógico ao invés de @BMP.

Usando o MVC, não consegui desenvolver de maneira satisfatória uma tela que só possua o grid, pois a classe MpFormModel depende da criação de um formulário onde esse grid será relacionado.