Hola muchachos:
1. Nos escriben muy poco al foro hay que hacer algo
2. este codigo es para crear checkbos dentro de un dbgrid, es muy util por que no esta señido a campo boolean si no para campos integer y varchar, lo unico que hay que hacer de mas es que la grilla no debe tener la opcion dgalwaysdhoweditor en true:
Este codigo es para pintar el check dentro del dbgrid
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 IBDataset3.IsEmpty then
begin
{ Campo 1. }
if CompareText(Column.FieldName, 'nomesp_comp') = 0 then
begin
Check := 0;
if IBDataset3['nomesp_comp'] = '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, 'item_subcomp') = 0 then
begin
Check := 0;
if IBDataset3['item_subcomp'] = '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, 'flag_subcomp') = 0 then
begin
Check := 0;
if IBDataset3['flag_subcomp'] = '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;
Este codigo es para cambiar el checkbox de checked a unchecked:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if Column.FieldName = 'FLAG_SUBCOMP' then
begin
IBDataset3.Edit;
if IBDataset3.FindField('FLAG_SUBCOMP').AsInteger = 1 then
IBDataset3.FindField('FLAG_SUBCOMP').AsInteger := 0
else
IBDataset3.FindField('FLAG_SUBCOMP').AsInteger := 1;
IBDataset3.Post;
Dbgrid1.Repaint;
end;
end;
Espero les sea util
, y recuerden escrbir a este foro cada vez que tengan una duda
, asi las solucionamos todos