Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   CheckBox en un Grid (https://www.clubdelphi.com/foros/showthread.php?t=12672)

el_barto 28-07-2005 15:48:44

ATENCIÓN: Para que esta solucion sea efectiva hay que tener en false la opcion dgAlwaysShowEditor

dmagui 20-10-2005 18:49:22

Cita:

Empezado por el_barto
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;

Hola pues fijense muchachos que este codigo no funciona del todo bien, si yo deseo que en mi grid existan dos campos de tipo CheckBox no me lo hace solo me muestra el ultimo, en este caso fijo que muestra en el campo prodcre el checkbox, como podria corregir este error ?, ya la estuve revisando bien y no lo he logrado

Gracias por sus posibles respuestas

Lepe 21-10-2005 11:21:16

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 

{ 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

{ 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
// solo se llama si no es ningun campo check
dbgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;

mcalmanovici 05-09-2007 18:16:54

Cuando hago dos veces click en el comboBox desaparece el mismo
 
Hola gente:
revivo este hilo para ver si me pueden ayudar con el problemita que tengo...
Me sirvio un montón todo lo que pusieron en el hilo este...
Puse en mi programa el código prupuesto por "el_barto", solo que lo hice para string y no booleano... Les copio el código para que no tengan que revisar hacia atras:

Código Delphi [-]
procedure TwMain.DBGrid4CellClick(Column: TColumn);//Cambia el estado del checkBox si es que el usuario hace un click sobre él.
begin
  if Column.FieldName = 'administrador' then
  begin
    CDSAbmUsuario.Edit;
    if CDSAbmUsuario.FindField('administrador').AsString = 'S' then
      CDSAbmUsuario.FindField('administrador').AsString := 'N'
    else
      CDSAbmUsuario.FindField('administrador').AsString := 'S';
    CDSAbmUsuario.Post;
    Dbgrid4.Repaint;
   end;
end;
procedure TwMain.DBGrid4DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);//Dibuja el checkBox en el dbGrid de usuarios (dbGrid4).
var
  Check: Integer;
  R: TRect;
begin
  if Column.FieldName = 'administrador' then //Primero que nada me fijo si es el campo administrador que yo quiero que sea checkBox.
  begin
    DBGrid1.Canvas.FillRect(Rect);//Construye la región rectangular del checkBox.
    Check := 0;
    if CDSAbmUsuario.FindField('administrador').AsString = 'S' then
      Check := DFCS_CHECKED; //Pone tilde en el checkBox si el campo administrador es 'S'
    R:=Rect;
    InflateRect(R,-2,-2); //Disminuye el tamaño del CheckBox
    DrawFrameControl(DBGrid4.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
  end;
end;
Me esta andando bastante bien el comboBox en el dbgrid...
El problema es el siguiente: hago click en el comboBox y me anda perfecto, ahora cuando vuelvo a hacer click en el mismo registro sin irme a otro desaparece el comboBox. Para que aparezca me tengo que ir a otro registro de dbgrid.....
No sé si alguien tiene alguna solución para este problema...

Desde ya agradezco sus repuestas.
Muchas gracias.
Mariano.

mcaro 04-02-2010 05:54:05

JvDBUltimGrid y JvDBCheckBox
 
Hola. sobre el tema de poner un check en una grilla yo utilice los componentes JvDBUltimGrid y JvDBCheckBox, los dos asociados al mismo dataSource.
En la propiedad "Edit Control" de JvDBUltimGrid seleccione que campos de la grilla queria asociar con los JvDBCheckBox

lavtaro 26-08-2017 18:38:15

Gracias por el código, revisando los post 26-08-2017 lo ocupé y funcionó, saludos.


La franja horaria es GMT +2. Ahora son las 15:11:11.

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