Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Poner checkbox en un dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=808)

aitken 26-05-2003 09:04:44

Poner checkbox en un dbgrid
 
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:
Código PHP:

procedure TForm1.DBGrid1DrawColumnCell(SenderTObject; const RectTRect;
  
DataColIntegerColumnTColumnStateTGridDrawState);
var
  
CheckInteger;
  
RTRect;
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_BUTTONDFCS_BUTTONCHECK or Check);
  
end;
end;


procedure TForm1.DBGrid1CellClick(ColumnTColumn);
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:

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect
Código Delphi [-]
; 
  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:

Código Delphi [-]
 
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




La franja horaria es GMT +2. Ahora son las 02:21:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi