Altero o FIELD mas não altera no DBGRID
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?
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
Curtidas 0
Respostas
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 ) ?
É 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
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.
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
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 !
Bom não é... mas é uma solução de contorno funcional !
GOSTEI 0
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!
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
19/05/2015
Bom que resolveu e melhor ainda que você compartilhou a solução !
GOSTEI 0