PDA

Ver la Versión Completa : Poner checkbox en un dbgrid


aitken
26-05-2003, 09:04:44
Buenas,

Necesito poner un checkbox en un dbgrid, para marcar las casillas, en vez de que me ponga true o false. Alguién puede ayudarme??

Gracias,,
Saludos

JavierB
26-05-2003, 09:36:55
Hola, aitken.

Este código lo saqué de alguna parte de la güeb:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Check: Integer;
R: TRect;
begin
if Column.FieldName = 'NombreCampo' then
begin
DBGrid1.Canvas.FillRect(Rect);
Check := 0;
if Table1.FindField('NombreCampo').AsBoolean then Check := DFCS_CHECKED;
R:=Rect;
InflateRect(R,-2,-2); //Disminuye el tamaño del CheckBox
DrawFrameControl(DBGrid1.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end;
end;


procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if Column.FieldName = 'NombreCampo' then
begin
Table1.Edit;
Table1.FindField('NombreCampo').AsBoolean:=not Table1.FindField('NombreCampo').AsBoolean;
end;
end;

Espero que te sirva. Saludos,

el_barto
19-07-2005, 15:57:13
Buenos dias foro, estuve probando este codigo pero no me funciona por que este codigo funciona para un campo boolean obviamente no me funciono por que el campo que yo tengo es entero y tiene dos posibles valores UNO (1) ó CERO (0), intente cambiar este codigo para datos enteros pero no me funciono, si alguien sabe como hacerlo se lo agradeceria mucho

Lepe
19-07-2005, 16:47:52
Pues solo tienes que sustituir la frase ".AsBoolean" por ".AsInteger = 1" en el primer procedimiento.

En el segundo, miras si es igual a 1 y le asignas un cero, en otro caso le asignas un 1; como ves simplemente se trata de romper esa asignación.

Un saludo

el_barto
19-07-2005, 17:12:26
Gracias lepe, eso mismo fue lo que hice, use como dice el dicho "la logica de campesino sano" y me salio lo siguiente:

para la primera parte:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Check: Integer;
R: TRect;
begin
if Column.FieldName = 'NombreCampo' then
begin
DBGrid1.Canvas.FillRect(Rect);
Check := 0;
if Table1.FindField('NombreCampo').AsInteger = 1 then Check := DFCS_CHECKED;
R:=Rect;
InflateRect(R,-2,-2); //Disminuye el tamaño del CheckBox
DrawFrameControl(DBGrid1.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end;
end;

y para la segunda parte:


procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if Column.FieldName = 'NombreCampo' then
begin
Table1.Edit;
Table1.FindField('NombreCampo').AsInteger:=0 //Bueno en realidad aqui si no se si va 1 o 0
Table1.FindField('NombreCampo').AsInteger;
end;
end;


esto fue lo que hice
corrigeme si me equivoco