Ver Mensaje Individual
  #17  
Antiguo 19-07-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Reputación: 19
el_barto Va por buen camino
checkbox en dbgrid campo NO BOOLEAN

Gracias por tu dedicacion eres un excelente forista n-mil gracias pero mira el codigo que use:

uso esto para dibujarlo:

Código Delphi [-]
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Check: Integer;
begin
{ Compruebo antes si la tabla está vacía. }
if not IBTable1.IsEmpty then
begin
{ Campo 1. }
  if CompareText(Column.FieldName, 'cod_per') = 0 then
  begin
    Check := 0;
  if IBTable1['cod_per'] = '1' then
   Check := DFCS_CHECKED;
   dbGrid1.Canvas.FillRect(Rect);
   DrawFrameControl(dbGrid1.Canvas.Handle, Rect,
   DFC_BUTTON, DFCS_BUTTONCHECK or Check);
  end
else
dbgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);

{ Campo 2. }
if CompareText(Column.FieldName, 'user_name') = 0 then
begin
Check := 0;
  if IBTable1['user_name'] = '1' then
   Check := DFCS_CHECKED;
   dbGrid1.Canvas.FillRect(Rect);
   DrawFrameControl(dbGrid1.Canvas.Handle, Rect,
   DFC_BUTTON, DFCS_BUTTONCHECK or Check);
  end
else
dbgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);

{ Campo 3. }
if CompareText(Column.FieldName, 'prodcre') = 0 then
  begin
  Check := 0;
   if IBTable1['prodcre'] = '1' then
      Check := DFCS_CHECKED;
      dbGrid1.Canvas.FillRect(Rect);
      DrawFrameControl(dbGrid1.Canvas.Handle, Rect,
     DFC_BUTTON, DFCS_BUTTONCHECK or Check);
   end
else
   dbgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;

y esto para cambiarlo cuando se haga un click en el campo deseado:

Código Delphi [-]
 
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  if Column.FieldName = 'PRODCRE' then
   begin
     IBTable1.Edit;
     if IBTable1.FindField('PRODCRE').AsInteger = 1 then
       IBTable1.FindField('PRODCRE').AsInteger := 0
     else
       IBTable1.FindField('PRODCRE').AsInteger := 1;
       IBTable1.Post;
       Dbgrid1.Repaint; // quizás más bien un Repaint.... pero en fin.
     end;
end;

Y pues le agregaria un boton que hiciera un commit.

Si te das cuenta es una combinacion de algunas de las respuestas publicadas en este foro

Entonces cuando alguien necesite un checkbox dentro de un dbgrid y el campo no sea booleano ya lo puede hacer asi. probado comprobado y recontraprobado
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita