Editar StringGrid
19/10/2020
0
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
Posts
20/10/2020
Emerson Nascimento
porque StringGrid e não dbGrid? tem algum motivo?
20/10/2020
Devnator
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!
21/10/2020
Emerson Nascimento
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
Clique aqui para fazer login e interagir na Comunidade :)