Eventos de DBGrid
Tenho 2 DBGrid e 2 tabelas, com um campo comum "NumNF".
Na 1ª tenho o cabeçalho da NF, ou seja, nº da NF, nome do comprador, data, etc...
Na 2ª tenho a descriminação dos produtos.
Com o evento OnCellClick ativado na 1ª DBGrid, clico numa célula e a 2ª me mostra essa descriminação, após passar por um filtro que é o campo "NumNF".
Até aí tudo bem, só que estou tentando, ao invés de clicar, navegar com as teclas de Seta para Cima e Seta para Baixo, só que dessa forma o ponteiro não aponta para o "NumNF" da 2ª DBGrid, ou seja, ela permanece inalterada mostrando os dados do último Click.
Testei todos os eventos da 1ª DBGrid mas não consegui resolver.
Existe alguma forma para isso?
Agradeço qualquer ajuda.
Na 1ª tenho o cabeçalho da NF, ou seja, nº da NF, nome do comprador, data, etc...
Na 2ª tenho a descriminação dos produtos.
Com o evento OnCellClick ativado na 1ª DBGrid, clico numa célula e a 2ª me mostra essa descriminação, após passar por um filtro que é o campo "NumNF".
Até aí tudo bem, só que estou tentando, ao invés de clicar, navegar com as teclas de Seta para Cima e Seta para Baixo, só que dessa forma o ponteiro não aponta para o "NumNF" da 2ª DBGrid, ou seja, ela permanece inalterada mostrando os dados do último Click.
Testei todos os eventos da 1ª DBGrid mas não consegui resolver.
Existe alguma forma para isso?
Agradeço qualquer ajuda.
Clovis Perazza
Curtidas 0
Respostas
Paulo Ricardo
08/05/2010
a maneira mas simples de fazer isso é usar Master/Detalhe ou se for no modo "braçau" trabalhe com o DataSource no evento OnDataSetState e nele faça os mesmo tratamentos que ta fazendo no grid, claro coloque um if para verificar o evento da tabela como por exemplo...
if DataSource.DataSet.State in [dsBowser] then // se o dataset estiver no modo de navegação então...
aplique esses comandos...
espero ter ajudado ;)
if DataSource.DataSet.State in [dsBowser] then // se o dataset estiver no modo de navegação então...
aplique esses comandos...
espero ter ajudado ;)
GOSTEI 0
Clovis Perazza
08/05/2010
Vou testar Paulo, depois posto o resultado.
Obrigado.
Obrigado.
GOSTEI 0
Carlos Mazzi
08/05/2010
Já tentaste usar o evento ONKEYDOWN?
if key = vk_down then //seta pra baixo
gridConsulta.SetFocus; ou if key = vk_up then //seta pra cima
gridConsulta.SetFocus;
gridConsulta.SetFocus; ou if key = vk_up then //seta pra cima
gridConsulta.SetFocus;
GOSTEI 0
Carlos Mazzi
08/05/2010
Ops faltou explicar, onde estiver usando as setas, use os comandos, .Next ou .Prior.
Abracos
GOSTEI 0
Clovis Perazza
08/05/2010
Valeu Carlos, vou testar.
Obrigado.
Obrigado.
GOSTEI 0
Clovis Perazza
08/05/2010
Carlos, testei sua sugestão mas não deu certo.
Talvez eu esteja fazendo algo errado, mas na procedure abaixo, as teclas Seta para Cima e Seta para Baixo, não são "sentidas".
Outras teclas como letras, números e Enter são reconhecidas, mas as PageUp, PageDown e Setas, não são.
Veja como usei:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #38) or (Key = #40) then <-
// if (key = chr(vk_down)) or (key = chr(vk_up)) then <- utilizei essas 2 comparações
DBGrid1.SetFocus;
end;
Abraços.
Talvez eu esteja fazendo algo errado, mas na procedure abaixo, as teclas Seta para Cima e Seta para Baixo, não são "sentidas".
Outras teclas como letras, números e Enter são reconhecidas, mas as PageUp, PageDown e Setas, não são.
Veja como usei:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #38) or (Key = #40) then <-
// if (key = chr(vk_down)) or (key = chr(vk_up)) then <- utilizei essas 2 comparações
DBGrid1.SetFocus;
end;
Abraços.
GOSTEI 0
Robson Catunda
08/05/2010
Acho mais prático utilizar o AfterScroll do dataset referente ao 1º dbgrid.
GOSTEI 0
Wilson Junior
08/05/2010
Também utilizo o AfterScroll, assim como o colega Robson, e funciona perfeitamente.
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
Clovis Perazza
08/05/2010
Obrigado pessoal, vou testar depois informo se funcionou.
Abraços.
Abraços.
GOSTEI 0
Carlos Mazzi
08/05/2010
Blz, ficamos no aguardo...
GOSTEI 0