CheckBox no DbGrid

21/03/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


Fferreira

Respostas

21/03/2006

Paullsoftware

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


Responder Citar

21/03/2006

Rodrigorpb

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:

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:

procedure TFAnotarBatismo.DBGrid1ColEnter(Sender: TObject);
begin
 if DBGrid1.SelectedField = IBQuery1STATUS then
    DBGrid1.Options := DBGrid1.Options - [dgEditing&93;
  else
    DBGrid1.Options := DBGrid1.Options + &91;dgEditing&93;;
end;


No OnCellClick:

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.


Responder Citar

21/03/2006

Fferreira

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

Muito Obrigado a todos.


Responder Citar