Fórum Dbrid com checkbox #299850
18/10/2005
0
The_holyman
Curtir tópico
+ 0Posts
18/10/2005
Martins
Colega dá uma olhada neste tópico [url=http://forum.devmedia.com.br/viewtopic.php?t=64485]DBGrid com CheckBox[/url], aqui vc vai encontrar o q procura.
Espero q te ajude.
Boa Sorte!!
Gostei + 0
18/10/2005
Bruno.preste.ap
A técnica que apresento aqui consiste em ´simular´ um checkbox na celula que representa o campo booleano, desenhando o controle ´ á mão´ de acordo com o valor do campo. Além disso, vamos permitir que o valor seja trocado quando o usuário clicar diretamente sobre a célula.
Adicionae ao formulario um compenente ImageList(paleta Win32). Dê um duplo clique nele e no editor adicione três figuras. Adicone o seguinte codigo ao evento OnDrawColumnCell do DBGrid:
(*..*)
(*Pinta Checkbox*)
[b:0f61946bbd]if[/b:0f61946bbd] Column.Field = ClientDataSet1Ativo [b:0f61946bbd]then[/b:0f61946bbd]
[b:0f61946bbd]begin[/b:0f61946bbd]
DBGrid1.Canvas.FillRect(rect);
ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rec.top+1,0);
[b:0f61946bbd]if[/b:0f61946bbd] ClientDataset1Ativo.asBoolean [b:0f61946bbd]then[/b:0f61946bbd]
ImageList1.Draw(DBGrid1.Canvas, rect.Left+10,Rect.top+1,2)
[b:0f61946bbd]else[/b:0f61946bbd]
ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.top+1,1);
[b:0f61946bbd]end;[/b:0f61946bbd]
Esse codigo desenha um ´CheckBoxna célula usando o metodo Draw do ImageList, que recebe como parametros o Canvas onde a figura deve ser desenhada, além das coordenadas e o indice da imagem. Observe que não chamamos DefaultDrawDataCell, pois nesse caso os valores True ou False não podem ser exibidos após a pintura da célula.
Adicione o seguinte codigo ao evento OnCellClick do DBGrid:
Procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if column.Field = ClientDataSet1ATIVO then
begin
Clientdataset1.edit;
ClientDataSet1ATIVO.AsBoolean := not ClientDataset1ATIVO.AsBoolean;
end;
end;
Esse código alterna o valor do campo booleano quanod o usuario clicar no Checkbox simulado.
adicione o seguinte codigo ao evento OnColEnter do DBGrid:
Procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
if DBGrid1.selectedfield = clientdataset1ATIVO then
DBGrid1.options:= DBGrid1.options - [dgediting]
else
DBGrid1.Options:= DBGrid1.options + [dgEditing];
end;
Este codigo destativa a edicao da celula quando o campo selecionado for ATIVO - isso porque o usuario nao ira digitar o valor, mas sim apenas marca-lo ou desmarca-lo com um clique.
[b:0f61946bbd][/b:0f61946bbd]
Gostei + 0
19/10/2005
Keidysakamoto
Só que essa componente é de terceiros e não é free.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)