Array
(
)

CheckBox no DbGrid

Fferreira
   - 21 mar 2006

E ai pessoal,

E ai pessoal,
Estou com um problema. Como faço para inserir um Checkbox em um DbGrid. É que tenho uma relação de produtos e desejo listar esse produtos em um dbgrid. Sendo q uma coluna do Dbgrid tenha um checkbox. Depois de escolher os produtos, habilitando seu checkbox. Gostaria de clicar em um botao para finalizar. Onde ele vai gravar o código do produto que estao com o checkbox habilitado, juntamente com o código da OS em uma tabela de relacionamento.

Se puderem me ajudar agradeço.
Preciso saber como criar esta coluna com checkbox e como verificar se ele está habilitado.

Atenciosamente,

Fábio


Paullsoftware
   - 21 mar 2006

Dê uma olhada nesse [url=http://forum.clubedelphi.net/viewtopic.php?t=74616&highlight=grid]Tópico[/url] :wink:


Rodrigorpb
   - 21 mar 2006

Olá fferreira,

Eu já passei por isso tb, tem um componente que peguém que explica isso mas é horrível na minha opnião. Então eu fiz o seguinte:

No OnDrawColumnCell do DBGrid coloca:

#Código

procedure TFAnotarBatismo.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.Field = IBQuery1STATUS then
begin
DBGrid1.Canvas.FillRect(Rect);
ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,0);
if IBQuery1STATUS.AsBoolean then
ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,1)
else
ImageList1.Draw(DBGrid1.Canvas,Rect.Left+10,Rect.Top+1,2);
end;
end;

Este ImageList1 é umas imagens que coloquei para True e False.

No OnColEnter do DBGrid:

#Código
procedure TFAnotarBatismo.DBGrid1ColEnter(Sender: TObject);
begin
if DBGrid1.SelectedField = IBQuery1STATUS then
DBGrid1.Options := DBGrid1.Options - [dgEditing]
else
DBGrid1.Options := DBGrid1.Options + [dgEditing];
end;


No OnCellClick:

#Código
procedure TFAnotarBatismo.DBGrid1CellClick(Column: TColumn);
begin
if Column.Field = IBQuery1STATUS then
begin
IBQuery1.Edit;
IBQuery1STATUS.AsBoolean:=not
IBQuery1STATUS.AsBoolean;
If Not(DM.TSSACRATUS.InTransaction) Then
DM.TSSACRATUS.StartTransaction;
IBQuery1.Post;
IBQuery1.ApplyUpdates;
DM.TSSACRATUS.CommitRetaining;
end;
end;


Este é o seguinte se ele estiver na Coluna IBQuerySTATUS, na hora do clique ele muda os valores borleanos no caso True e False. E quando é mudade ele salva os valores na minha tabela.

Ai no banco eu só verifico qual está True e dou o comando.
Mas quando fecho o Form eu dou um comando SQL para deixar a Coluna STATUS toda False de novo.

UPDATE CADASTRODEBATISMO SET STATUS = ´F´


Eu mudei este fonte de acordo com minhas necessidades, eu encontrei um exemplo em algum lugar da net e naum me lembro onde.

Rodrigo.


Fferreira
   - 21 mar 2006

O Rodrigo Valeu, fiz como vc me passou e fechou certinho, só precisei fazer alguns ajustes.

Muito Obrigado a todos.