Dbrid com checkbox

Delphi

18/10/2005

Pessoal preciso de um DbGrid com check box, alguem conhece algum componente com essa propriedade ou alguma forma de faze-lo?


The_holyman

The_holyman

Curtidas 0

Respostas

Martins

Martins

18/10/2005

Pessoal preciso de um DbGrid com check box, alguem conhece algum componente com essa propriedade ou alguma forma de faze-lo?


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
Bruno.preste.ap

Bruno.preste.ap

18/10/2005

Por padrão, campos booleanos são exibidos em um dbgrid como ´True´ ou ´False´, ou em branco quando estão nulos. Poderiamos usar a mesma técnica do DateTimerPicker e criar um DBCheckBox sobre a célula de colunas booleanas - precisaríamos de muitos DBChekBoxes.
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
Keidysakamoto

Keidysakamoto

18/10/2005

A componente TwwDBGrid da InfoPower faz isso.
Só que essa componente é de terceiros e não é free.


GOSTEI 0
POSTAR