



Algumas vezes temos uma lista de dados onde desejamos selecionar alguns itens. Uma forma elegante é colocando uma coluna com CheckBox, para que o usuário possa marcar o que desejar.
Mas como fazer isso se uso de componentes de terceiros?
Existe duas formas:
Caso o seu Field do seu dataset for do tipo Boolean, o DBGrid irá montar automaticamente o checkbox na coluna.
Para os demais casos, podemos colocar um código que faça isso.
Lembre de declarar Math na seção uses.
No evento OnDrawColumnCell do DBGrid.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Check: Integer; R: TRect; begin inherited; if ((Sender as TDBGrid).DataSource.Dataset.IsEmpty) then Exit; // Desenha um checkbox no dbgrid if Column.FieldName = 'SELECAO' then begin TDBGrid(Sender).Canvas.FillRect(Rect); if ((Sender as TDBGrid).DataSource.Dataset.FieldByName('SELECAO').AsInteger = 1) then Check := DFCS_CHECKED else Check := 0; R := Rect; InflateRect(R, -2, -2); { Diminue o tamanho do CheckBox } DrawFrameControl(TDBGrid(Sender).Canvas.Handle, R, DFC_BUTTON, DFCS_BUTTONCHECK or Check); end; end; |
Neste exemplo foi utilizado um field de nome SELECAO,
onde é testado o mesmo.
Caso o seu valor seja 1, desenha um check marcado,
senão é desenhado um check desmarcado.
No Evento OnDblClick do DbGrid, é necessário um código
para atualizar o dataset que está vinculado ao datasource do dbgrid.
1 2 3 4 5 6 7 8 9 10 11 12 | procedure TForm1.DBGrid1DblClick(Sender: TObject); begin if ((Sender as TDBGrid).DataSource.Dataset.IsEmpty) then Exit; (Sender as TDBGrid).DataSource.Dataset.Edit; (Sender as TDBGrid).DataSource.Dataset.FieldByName('SELECAO').AsInteger := IfThen((Sender as TDBGrid).DataSource.Dataset.FieldByName('SELECAO').AsInteger = 1, 0, 1); (Sender as TDBGrid).DataSource.Dataset.Post; end; |
Lembrando que neste exemplo foi feito uso da função IfThen que está disponível na unit Math do Delphi.
Como este código é para você ter um DBGrid funcionando com CheckBox muito bem.
Para ajudar no entendimento, asista a explicação do exemplo.
Se preferir, podes fazer o download dos fontes do exemplo.
[download id=”3962″]
Qualquer dúvida, poste comentários no post.
Aquele abraço.
Você precisa fazer o login para publicar um comentário.
Como comentado por Ivan Cezar no grupo no skype,o IfThen para string está localizado na unit System.StrUtils. Então acredito se der uses da unit, o código já irá funcionar com string também.
Muito obrigado pela ajuda , parabens
Eu Uso Firebird como Fazer isso com o banco Firebird?
Como faço para não exibir a numeração apenas o check?
Uma forma é alinhar o texto da coluna ao centro, dai o check acaba o cobrindo.
Muito bom