PEX - Grade com campo de auto incremento
Hoje nativamente a ferramenta DOX ainda não tem o recurso de contador de linhas de uma grade, para isso foi realizado uma forma de se resolver temporariamente esta questão, pois para alguns essa informação visualmente pode fazer diferença.
Para isso utilizaremos apenas 4 formulários:
- 1 Grade de dados
- 1 Botão "Adicionar": com evento PEX ao sair para adicionar linhas na grade acima
- 1 Formulário dissertativo: para o usuário informar o sequencial que será incrementado
- 1 Botão "Remover": com evento PEX ao sair para remover as linhas adicionadas na grade.
Conforme imagem do portal:
No formulário de grade de dados desmarque a opção "Permite incluir registros" e "Permite excluir registros". Estas opções é o que permite ao usuário fazer as ações no portal, porém como os botões nativos da grade não executam PEX ao sair, iremos retirar e criarmos os nossos de forma manual.
Na aba "Campos":
Agora, depois de criado o formulário de grade, crie os outros formulários de botão e dissertativa.
Botão "Adicionar". PEX ao sair:
const
cs_grade = '1';
var
liIdRegistro: Integer;
loRegistro: TJSONObject;
loNovoRegistro : TJSONObject;
liSequencia : Integer;
begin
//incrementa sequencial
liSequencia := 1;
for liIdRegistro := 0 to Pred(aoFormularios.GetJSON('1').GetArrayJSON('DADOS').Count) do
begin
loRegistro := aoFormularios.GetJSON('1').GetArrayJSON('DADOS').GetItemAsJson(liIdRegistro);
if loRegistro.GetInt('REGISTROS') >= liSequencia then
begin
liSequencia := loRegistro.GetInt('REGISTROS')+1;
end;
end;
//insere informações na grade
loNovoRegistro := TJSONObject.Create;
loNovoRegistro.AddPair('REGISTROS', IntToStr(liSequencia));
aoFormularios.GetJSON(cs_grade).GetArrayJSON('DADOS').Add(loNovoRegistro);
end;
Botão "Remover". PEX ao sair:
const
cs_grade = '1';
var
liIdRegistro: Integer;
loRegistro: TJSONObject;
loNovoRegistro : TJSONObject;
begin
//Percorre a grade
for liIdRegistro := 0 to Pred(aoFormularios.GetJSON('1').GetArrayJSON('DADOS').Count) do
begin
loRegistro := aoFormularios.GetJSON('1').GetArrayJSON('DADOS').GetItemAsJson(liIdRegistro);
//Verifica o valor digita se for correspondente ao Registro que contém na grade e remove.
if loRegistro.GetInt('REGISTROS') = aoFormularios.GetJSON('3').GetInt('TEXTO') then
begin
aoFormularios.GetJSON('1').GetArrayJSON('DADOS').Remove(liIdRegistro);
end;
end;
end;
No portal:
Lembrando que neste exemplo, fizemos apenas uma demonstração da utilização de PEX em grade, pode-se ser utilizado de várias validações e personalizações. Faça à vontade.
Versão homologada: 12.3.5