CheckBox no DBGrid do Delphi


Simular CheckBox no DBGrid, sempre foi algo muito trabalhoso,
mas existe uma jeito simples e rápido de fazer essa simulação.

Adicione no formulário um: TDBGrid,TDataSource e
TClientDataSet.
-> O TDataSource e o TClientDataSet ambos estão na paleta Data Access.
-> O TDBGrid está na paleta Data Controls.

No DBGrid1, para fazer a ligação dele com o DataSource, em Propriedade faça:
-> DataSource = DataSource1
Para desativar o modo Edição no DBGrid, na Propriedade Options faça:
-> dgEdition = False

No DataSource1, para fazer ligação dele com o ClientDataSet, em Propriedade faça:
-> DataSet = ClientDataSet1

No ClientDataSet1, faça:
-> dê um duplo clique no ClientDataSet1, ou clique com o botão direito do mouse, e escolha a opção Fields Editor ...

Uma janela será aberta.
Na parte vazia (em branco) clique com o botão direito do mouse, e escolha a opção NewField.


Crie um campo com as seguintes características:

Tipo (type): StringTamanho (size): 1
Nome (name): ATIVO


Após o preenchimento, clique em OK, e em seguida feche a janela, onde o campo ATIVO está
aparecendo.











Para Ativar o ClientDataSet:
-> clique com o botão direito do mouse em ClientDataSet, e clique em Create DataSet.





























-> na Propriedade Active coloque como True.




















Se todos os procedimentos acima tiverem sido seguidos, nesse momento o campo ATIVO, já aparecerá no DBGrid.


Em Eventos do DBGrid siga as instruções abaixo.

Para Desenhar o CheckBox no DBGrid (use o procedimento DrawColumnCell do DBGrid):

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var

Check: Integer;
R: TRect;
begin
//Desenha um chec
kbox no dbgrid
if Column.FieldName = 'ATIVO' then begin
DBGrid1.Canvas.FillRect(Rect);

Check := 0;
if
ClientDataSet1Ativo.AsString = 'X' then
Ch
eck := DFCS_CHECKED
else Check := 0;
R:=Rect;
InflateRect(R,-2,-2
); {Diminue o tamanho do CheckBox}
DrawFrameControl(DBGrid1.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end;

end;


Para executar ação TRUE ou FALSE no CheckBox (use o procedimento CellClick do DBGrid):
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
ClientDataSet1.Edit;
if ClientDataSet1Ativo.AsString = 'X' then
ClientDataSet1Ativo.AsString := ''
else ClientDataSet1Ativo.AsString := 'X';
ClientDataSet1.Post;
end;

Programa executando:


*********************************************************************************
Faça o download do arquivo: CheckBox no DBGrid.rar
(acompanha arquivo: midas.dll -> necessária para o funcionamento)
*********************************************************************************


"Bem feito é melhor do que bem explicado." Benjamim Franklin.

34 comentários:

Nazareno disse...
18 de julho de 2009 às 11:24

Boa dica, me ajudou muito em um projeto, valeu!

Anônimo disse...
26 de novembro de 2009 às 16:12

Me ajudou muito também obrigado ....

Anônimo disse...
1 de fevereiro de 2010 às 14:25

ótima dica

valeu

Anônimo disse...
5 de fevereiro de 2010 às 00:24

Muito boa essa dica...
até agora a maneira mais simples que já vi para colocar um ChechBox em um DBGrid.

Valeu!

Anônimo disse...
9 de março de 2010 às 08:47

mtooo boa a dica !!! perfeito !

Anônimo disse...
13 de março de 2010 às 03:36

valeu ... muito obrigado pela dica...

odair

Anônimo disse...
8 de abril de 2010 às 15:05

Obrigado amigo! Muito útil sua dica!

Anônimo disse...
21 de abril de 2010 às 22:29

Muito boa a dica, meus parabéns pela iniciativa.

Anônimo disse...
29 de abril de 2010 às 15:27

Perfeito!! Código limpo e simples. Muito claro. Parabéns. Valeu mesmo!

Anônimo disse...
22 de maio de 2010 às 11:44

Olá amigo, muito bom mesmo. Obrigado. Eu ainda entou procurando como imprimir estas linha selecionada clicando num botao para visualizar e na janela imprimir. c_poeta@hotmail.com

Anônimo disse...
22 de setembro de 2010 às 19:03

graaaande dica !!

Anônimo disse...
19 de novembro de 2010 às 17:51

Vlw cara!!! Ajudou mto!

Anônimo disse...
26 de outubro de 2011 às 13:15

Há várias formas indicadas para colocar um CheckBox no DBGrid. Nenhuma tão simples e funcional como esta. Parabéns

Anônimo disse...
17 de novembro de 2011 às 17:55

Parabéns amigo a muito tempo estava precisando. Já tinha até desistido, você foi minha salvação

Anônimo disse...
23 de novembro de 2011 às 10:46

Obrigada pela Dica! Parabéns!

Anônimo disse...
27 de dezembro de 2011 às 15:20

grande diga amigo!!! às vezes bate aquele esquecimento e "pouca voia" de fazer...aí vem o google e nos ajuda!!!

Grato amigo

Luiz disse...
5 de janeiro de 2012 às 21:03

Obrigado pela ajuda!

MBA Gestão de Pessoas 2008 UFSJ disse...
16 de janeiro de 2012 às 15:28

Boa tarde!
Fiz o exemplo acima no Delphi 5, porém no lugar do título da coluna aparece o CheckBox. Alguém poderia me ajudar a corrigir isso?
Obrigado.

Cleber Moises Grings disse...
12 de março de 2012 às 11:24

Parabens, muito bom.

Anônimo disse...
22 de maio de 2012 às 15:26

Cara, eu fiz algo semelhante a isso ! Só que eu uso uma TMyQuery para fazer uma consulta e preencher a DBGrid. A configuração é a seguinte:
DBGrid -> DataSource -> ClientDataSet-> DataSetProvider - TMyqyery. Ele preenche a Grid sem problemas, o problema ocorre quando que tento limpar a DBGrid, já tentei de tudo ! Até consegui limpar, so que depois eu tento fazer novamente a consulta ele não preenche a DBGrid, como se o ClientDataSet não estivesse funcionando mais. Como eu faço para limpar os dados dessa Grid e poder fazer outra consultar e preenche-la com outros dados novamente ?

George Fábio Fonseca disse...
6 de fevereiro de 2013 às 20:12

Véi, vlw. Parabéns...

Anônimo disse...
14 de março de 2013 às 20:52

Isso funciona no delphi 7? porque tentei de tudo quanto é jeito, e não funciona, quando eu clico o CheckBox some.. :/ se alguem puder me ajudar..

José Aurélio disse...
15 de março de 2013 às 17:43

Usei no Delphi 7 funcionou muito bem. Eu usei no lugar do TClientDataSet uma Tabela de Memoria TMemoryTable.

Unknown disse...
16 de abril de 2013 às 10:23

Parabéns, codigo simples e muito funcional
continue assim.
abraços.
Mário Sergio

Excelenti Soluções disse...
5 de julho de 2013 às 13:07

Perfeito... muito bom seu post me ajudou muito.
Obrigado!!

Anônimo disse...
25 de setembro de 2013 às 10:13

Excelente ... era exatamente o que eu precisava. Marcelo

Blogger de Delphi disse...
26 de fevereiro de 2014 às 15:29

perfeito mais simples impossivel, me quebrou um galhão da poxa de tão grande

Anônimo disse...
11 de março de 2014 às 12:39

Muito bom mesmo... de todos que testei, esse foi o único que cumpriu o objetivo desejado...

Unknown disse...
3 de março de 2016 às 16:42

top demais!!!ajudou bastante!!!
obrigado

Unknown disse...
8 de julho de 2016 às 00:03

O Melhor e mais resumido que já vi

Anônimo disse...
24 de agosto de 2016 às 14:13

Muito obrigado amigo por compartilhar essa dica!
Solução super simples porém 100% funcional!

Unknown disse...
30 de novembro de 2016 às 17:59

tenho dois campos por exemplo valor1, valor2 preciso que o usuario clique no que ele quizer como faria isso ? pois criei os dois campos na tabela mais nao sei como selecionar um de cada no cellclick.

Anônimo disse...
10 de maio de 2022 às 09:09

Cara, muito obrigado.

Anônimo disse...
14 de junho de 2023 às 06:50

Nota 10 resolveu. Obrigado por compartilhar

Postar um comentário