DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Como colocar um DateTimePicker no DBGrid?

Fala galera do Show Delphi, tudo beleza?

O DBGrid padrão do Delphi já nos oferece muitas funcionalidades, mas há certas funções importantes no uso do dia a dia dos usuários que infelizmente não existem por padrão.

Uma delas é o preenchimento de datas, onde o usuário precisa informar tudo, inclusive as barras (“/”), e ainda ele pode informar algo incorreto e parecer um erro na tela, o que acaba se tornando em uma experiência menos agradável ao cliente.

Bem, e o que fazer?

Uma solução para este tipo de situação é colocar um DateTimePicker dentro do DBGrid, assim o usuário terá todas as funções do calendário e também os possíveis erros de validação de data serão evitados.

Maravilha, mas como fazer isso?

Vamos lá, o código é simples, mas não em um lugar único.

Atualizando a informação do Field.

1
2
3
4
5
6
7
8
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  { Fazendo o seu dataset receber o valor informado no DateTimePicker }
  if ClientDataSet1.State in dsEditModes then
  begin
    ClientDataSet1DATA.AsDateTime := DateTimePicker1.Date;
  end;
end;

Mantendo a naturalidade de passar o foco pelas colunas.

1
2
3
4
5
procedure TForm1.DateTimePicker1Exit(Sender: TObject);
begin
  { Seta o foco de volta para o DBGrid depois de sair do DateTimePicker }
  DBGrid1.SetFocus;
end;

Mandendo o DateTimePicker, quando não usado.

1
2
3
4
5
6
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
  { Deixa o DateTimePicker invisivível ao sair do foco na coluna. }
  if DBGrid1.SelectedField.FieldName = 'DATA' then
    DateTimePicker1.Visible := False;
end;

Fazendo o DateTimePicker ficar exatamente na frente do DBGrid.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  { Faz o DateTimePicker ficar exatamente na frente do DBGrid }
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = 'DATA') then
      with DateTimePicker1 do
      begin
        Left := Rect.Left + DBGrid1.Left + 1;
        Top := Rect.Top + DBGrid1.Top + 1;
        Width := Rect.Right - Rect.Left + 2;
        Width := Rect.Right - Rect.Left + 2;
        Height := Rect.Bottom - Rect.Top + 2;
 
        Visible := True;
      end;
  end;
end;

Fazendo o DateTimePicker receber os eventos de KeyPress.

1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = Chr(9)) then
    Exit;
 
  { Seta os eventos de key press do dbgrid para o DateTimePicker1 }
  if (DBGrid1.SelectedField.FieldName = 'DATA') then
  begin
    DateTimePicker1.SetFocus;
    SendMessage(DateTimePicker1.Handle, WM_Char, word(Key), 0);
  end;
end;

Parece complicado? Preparamos um vídeo para ajudar no entendimento.

Se preferir, podes fazer o download dos arquivos do exemplo.

Download “Exemplo DateTimePicker no DBGrid”

DateTimePicker_DBGrid.zip – Baixado 126 vezes – 55,29 KB

Dúvidas? Deixe o seu comentário!

Um abraço e até o próximo post.

Facebook Comments Box
  • Giovani Da Cruz
  • 5.684 views
  • 2 comentários
  • 18 de maio de 2020

Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!

2 respostas para “Como colocar um DateTimePicker no DBGrid?”

  1. Paulo disse:

    Boa dica, parabéns.

  2. Maikon Bortoncello disse:

    Boa dica, parabéns.

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados