Fórum Editar StringGrid #613088
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
Curtir tópico
+ 0Posts
20/10/2020
Emerson Nascimento
porque StringGrid e não dbGrid? tem algum motivo?
Gostei + 0
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!
Gostei + 0
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)