Editar StringGrid

19/10/2020

0

Boa tarde Pessoal,
Mais uma vez recorro a ajuda de vocês. Tenho um StringGrid em meu form e carrego as informações dele de uma tabela. Estas informações podem ser editadas pelo usuário, assim como o usuário pode acrescentar linhas no StringGrid e adicionar informações relevantes neste form. O que preciso é que quando o usuário acrescente linhas com informações o sistema salve apenas estas alterações. Hoje salvo e recupero da seguinte forma:
SALVAR:
 with CDS, StringGrid1 do
 begin
  for i := 1 to Pred(RowCount) do
  begin
  Insert;
  FieldByName('ID').Value:= DBEdit1.Text;
  FieldByName('DESCRICAO').AsString := Cells[0,i];
  FieldByName('DOCUMENTO').AsString := Cells[1,i];
  FieldByName('AREA').AsString := Cells[2,i];
  FieldByName('VALOR').AsString := Cells[3,i];
  Post;
  end;
 end;


RECUPERAR:
CDSRecuperaGrid.Close;
CDSRecuperaGrid.ParamByName('pid').AsInteger:= StrToIntDef(DBEdit1.Text, 0);
CDSRecuperaGrid.Open;
 if CDSRecuperaGrid.RecordCount > 0 then
 begin
  for i := 1 to CDSRecuperaGrid.RecordCount do
  begin
  StringGrid1.RowCount:= CDSRecuperaGrid.RecordCount + 1;
  StringGrid1.Cells[0,i]:= CDSRecuperaGrid.FieldByName('DESCRICAO').AsString;
  StringGrid1.Cells[1,i]:= CDSRecuperaGrid.FieldByName('DOCUMENTO').AsString;
  StringGrid1.Cells[2,i]:= CDSRecuperaGrid.FieldByName('AREA').AsString;
  StringGrid1.Cells[3,i]:= CDSRecuperaGrid.FieldByName('VALOR').AsString;
  SBnew.Enabled:= false;
  CDSRecuperaGrid.Next;
  end;
 end
  else
 begin
 limpaGrid(StringGrid1);
 SBnew.Enabled:= true;
 end;


Como podem notar eu tentei forçar somente edição neste form, mas sem sucesso e não sei como prosseguir para solução que espero.
Se puderem me dar uma ideia de como prossigo. Agradeço desde já.
Devnator

Devnator

Responder

Posts

20/10/2020

Emerson Nascimento

pergunta:

porque StringGrid e não dbGrid? tem algum motivo?

Responder

20/10/2020

Devnator

Bom dia,

pergunta:

porque StringGrid e não dbGrid? tem algum motivo?



Respondendo sua pergunta Emerson. Eu carrego informações de uma tabela, que é o tipo de transação em uma coluna e na outra coluna o usuário digita o valor do documento, essas informações posteriormente são salvas em uma outra tabela com ID do cliente, documento e valor. Só que neste StringGrid eu preciso que seja preenchido somente os documentos referentes as operações de cada orçamento fechado. Neste caso utilizei StringGrid com ComboBox na primeira coluna para o usuário selecionar apenas os documentos contidos na negociação e na segunda coluna eu tratei para apenas aceitar números, se alterar para DBGrid ele trará todos os documentos e isto dificultará a usabilidade para o usuário que terá que procurar em mais de duzentos registros e incluir os valores que podem estar no começo, meio ou fim do DBGrid. No StringGrid com a seleção apenas dos documentos que pertencem a negociação a visibilidade do sistema (Na minha opinião) fica menos poluída.

Obrigado!
Responder

21/10/2020

Emerson Nascimento

você pode fazer isso a partir de um dataset ligado numa grid.
os documentos podem ficar em outro dataset e serem filtrados conforme necessidade, e serem utilizados como lookup no campo desejado.
acredito que seja mais produtivo e mais fácil de gerenciar os registros incluídos/alterados.

você pode se orientar por este artigo.

https://www.devmedia.com.br/clientdataset-gerando-tabela-temporaria-em-memoria/3193


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar