Altero o FIELD mas não altera no DBGRID

Delphi

19/05/2015

Olá pessoal, tudo bem?

No meu código eu crio um ClientDataSet em tempo de execução e preencho os FIELDS, que são do tipo CURRENCY, com um saldo.
Coloquei esse DataSet no DBGRID e deixo o cliente alterar esse SALDO, porém coloquei no "onvalidate" desses fields uma verificação, aonde
ele compara o saldo com o valor que o usuário preencheu, e se for maior, ele manda uma mensagem e retorno o valor para o saldo.

Eu faço essa alteração no field, mas no DBGRID mantém o valor que o usuário digitou, não retornando pro saldo.

Alguém tem alguma ideia o que posso fazer?
Wash

Wash

Curtidas 0

Respostas

Marcos P

Marcos P

19/05/2015

Ou seja... quando o valor fornecido for maior que o valor que estava, você mantém o valor que estava.

É isso ?!?

A alteração ocorre direto na célula da grid ou você carrega algum form para isso ?

Tentou um refresh na grid, depois de retornar o valor ?

Tentou um CancelUpdates ?

Tentou um ApplyUpdates no client data set ( mesmo sem ter existido qualquer alteração ) ?
GOSTEI 0
Wash

Wash

19/05/2015

Sim, eu coloquei na função do onvalidate o refresh no DBGRID... retornar o valor tanto no field, quanto no text da coluna selecionada...

CancelUpdates não... mas eu acredito que no onvalidate ele já fez o update, porque a alteração é feita diretamente na grid... ela está editável.
GOSTEI 0
Marcos P

Marcos P

19/05/2015

Tenta o CancelUpdates... senão rolar, uma alternativa é você guardar o conteúdo anterior em uma variável local e se precisar, atualizar para o mesmo valor !

Bom não é... mas é uma solução de contorno funcional !
GOSTEI 0
Wash

Wash

19/05/2015

Ufa, consegui resolver Marcos. De outra maneira.

Como fiz:

Eu criei uma procedure padrão UpdateData aonde eu faço a verificação se o valor digitado é maior que o saldo.
Se for, eu coloco Value := Saldo...

Aí após criar o clientdataset, eu percorri com um for o DbGrid para inserir no evento OnUpdateData das colunas a procedure...

for w := 2 to DBGrid.Columns.Count - 1 do
begin
DbGrid.Columns[w].OnUpdateData := UpdateData;
end;

e assim ele entra nessa validação.

Agora está ok!

Obrigado Marcos!
GOSTEI 0
Marcos P

Marcos P

19/05/2015

Bom que resolveu e melhor ainda que você compartilhou a solução !
GOSTEI 0
POSTAR