quarta-feira, 5 de outubro de 2011

Delphi - CheckBox no DBGrid.

Ola Pessoal,

Após um tempo de turbulência no trabalho, mais um post.


Estava desenvolvendo mais um sistema para um cliente e me deparei com uma duvida.
- Criei uma tabela nova pro cliente, com um campo Boolean.
- Coloquei um DBGrid para ele acessar essa tabela (adicionar, remover, editar e excluir).
- E um DBNavigator

Uma tabela simples mesmo, possível de controlar com um DBNavigator. Só que fiquei pensando: Porque eu não coloco um simples CheckBox pro cliente neste campo boolean, pra evitar que ele tenha que ficar digitando FALSE/TRUE. Um clique e pronto!

Vamos ao código pra fazer isso ;-)

1) Crie seu formulário, com o DBGrid conectado a tabela.
2) Selecione o seu DBGrid e acione o evento OnDrawColumnCell.
3) Coloque o seguinte código

procedure Tfrm_tarefas.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Check: Integer;
  R: TRect;
begin
  if Column.FieldName = 'concluido' then //COLOQUE O NOME DA COLUNA, NO MEU CASO 'CONCLUIDO'
  begin
    DBGrid1.Canvas.FillRect(Rect);
    Check := 0;
    if tarefasconcluido.AsBoolean = true then
      Check := 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;

4) Selecione o seu DBGrid e acione o evento OnCellClick
5) Coloque o seguinte código:


procedure Tfrm_tarefas.DBGrid1CellClick(Column: TColumn);
begin
  tarefas.Edit;
  if tarefasconcluido.AsBoolean = true then
    tarefasconcluido.AsBoolean := false
  else
    tarefasconcluido.AsBoolean := true;
  tarefas.Post;
end;


É isso ai pessoal! Bem simples e fácil

Espero ter ajudado, Abraços

6 comentários:

  1. Olá, estou usando o mysql e ele não aceita o campo boolean, tentei usar outros campos mais não funcionou, você não saberia uma maneira de adaptar esse codigo com o banco mysql?

    ResponderExcluir
  2. Meu caro, uma saída que é usada na minha empresa é criar um campo do tipo texto e gravar 'S' para verdadeiro e 'N' para falso. (Identificadores para SIM e NAO).

    Espero ter ajudado. Caso queira, me mande um email.

    tiago.shinoda@hotmail.com

    ResponderExcluir
  3. Mas ao clicar no checkbox o campo entra em edição e mostra o valor do campo

    ResponderExcluir
  4. O que vem a ser esse tarefasconcluído? Pq não tem no código a definição dele.

    ResponderExcluir
  5. Olá HgabrielEnrique

    É um campo da tabela.

    ResponderExcluir
  6. Ola, o exemplo funcionou com voces ?

    ResponderExcluir