Grade - Incluir e remover linhas via PEX
Olá, neste tópico iremos apresentar como gerar e modificar uma grade dinamicamente utilizando PEX.
Serão abordados a inserção de novas linhas na grade, remoção de um índice e reorganização dos índices.
Vamos criar um processo de exemplo, contendo uma atividade onde iremos adicionar uma grade de dados, dois botões (Adicionar e Remover) e um campo para informarmos a quantidade (este campo será usado para inserir "x" linhas na grade ou remover a linha de índice "x").
Com o processo e a atividade devidamente criados, vamos criar os formulários, para este exemplo serão necessários 4 formulários:
- Grade de Dados
- Botão (Adicionar)
- Dissertativa (N°/Índice)
- Botão (Remover)
Com os formulários devidamente criados, iremos configurar seus eventos.
Botão Adicionar, este botão será o responsável por inserir novas linhas na nossa grade de dados, para isso é validados a quantidade de linhas atuais da grade e os índices que serão atribuídos a ela.
const
cs_grade = '1';
cs_Qtd = '3' ;
var
liIdRegistro: Integer;
loRegistro: TJSONObject;
loNovoRegistro : TJSONObject;
liSequencia : Integer;
liQtd : Integer;
liQtdAtual : Integer;
liQtdFinal : Integer;
begin
//Define a quantidade informado no campo "N°"
liQtd := StrToInt(aoFormularios.GetJSON(cs_Qtd).GetStr('TEXTO'));
//Define a quantidade de linhas presentes atualmente na grade
liQtdAtual := aoFormularios.GetJSON(cs_grade).GetArrayJSON('DADOS').Count;
//Verifica se a grade já possui linhas adicionados
if (liQtdAtual > 0) then
begin
//Define qual será o último indices (considerando o indice atual + o número de linhas informados para adicionar)
liQtdFinal := liQtdAtual + liQtd;
//Percorremos a lista até o indice final
for liSequencia := liQtdAtual+1 to liQtdFinal do
begin
//Criamos e adicionamos uma nova linha na grade de dados
loNovoRegistro := TJSONObject.Create;
loNovoRegistro.AddPair('REGISTROS', liSequencia);
loNovoRegistro.AddPair('NOME', '');
loNovoRegistro.AddPair('DATA', Date);
loNovoRegistro.AddPair('CIDADE', '');
aoFormularios.GetJSON(cs_grade).GetArrayJSON('DADOS').Add(loNovoRegistro);
end;
end
else
begin
//Percorremos a lista até o indice final
for liSequencia:= 1 to liQtd do
begin
//Criamos e adicionamos uma nova linha na grade de dados
loNovoRegistro := TJSONObject.Create;
loNovoRegistro.AddPair('REGISTROS', liSequencia);
loNovoRegistro.AddPair('NOME', '');
loNovoRegistro.AddPair('DATA', Date);
loNovoRegistro.AddPair('CIDADE', '');
aoFormularios.GetJSON(cs_grade).GetArrayJSON('DADOS').Add(loNovoRegistro);
end
end;
end;
Botão Remover, este botão será o responsável por remover o índice informado pelo usuário e reorganizar os índices da grade, garantindo que não ficarão "furos" na indexação da grade.
const
cs_grade = '1';
cs_n = '3';
var
liIdRegistro: Integer;
loRegistro: TJSONObject;
loNovoRegistro : TJSONObject;
liRemover : Integer;
liQtd: Integer;
liI : Integer;
begin
//Define a quantidade informado no campo "N°"
liQtd := aoFormularios.GetJSON(cs_grade).GetArrayJSON('DADOS').Count ;
//Define o indice que será remover
liRemover := StrToInt(aoFormularios.GetJSON(cs_n).GetStr('TEXTO'));
//Percorre toda a grade
for liI := 0 to liQtd do
begin
//Verifica se o indice atual da repetição é igual ao indice informado para remoção
if liI = liRemover then
begin
//Remove a linha presente no indice informado
aoFormularios.GetJSON(cs_grade).GetArrayJSON('DADOS').Remove(liRemover-1);
end
end;
//Percorre a grade partindo do indice 0 até o maior indice da grade
for liIdRegistro := 0 to Pred(aoFormularios.GetJSON(cs_grade).GetArrayJSON('DADOS').Count) do
begin
//Atribui a linha presente no indice atual para a variavel loRegistro
loRegistro := aoFormularios.GetJSON(cs_grade).GetArrayJSON('DADOS').GetItemAsJson(liIdRegistro);
//Define o novo indice da linha
loRegistro.SetInt('REGISTROS', liIdRegistro+1);
end;
end;
Demonstração:
Versão Homologada: 12.15+