Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Chekbox en dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=55776)

ingmichel 25-04-2008 22:28:12

Chekbox en dbgrid
 
hola a todos, necesito ayuda para mostrar un dato de tipo boolean como un check box en un dbgrid, es decir que cuando el campo sea true el chekbox del grid me apareza checkeado y de lo contrario no. por favor si alguien tiene experiencia con esto le agradecere bastante gracias de antemano...



El conocimiento nos hace sabios, compartirlo nos hace aun mas!!!

gluglu 25-04-2008 22:51:47

Si utilizas la búsqueda del foro y buscas 'CheckBox' y 'DBGrid' te saldrán múltiples hilos al respecto. Este tema se ha tratado ya en numeros temas. :rolleyes:

Dedalo 25-04-2008 23:05:11

Esto lo vi en Internet, no recuerdo donde, y funciona razonablemente bien.

Código Delphi [-]
 
 

unit MiUnidad;
 
interface
 
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ExtCtrls, DBCtrls, StdCtrls, Mask, Db, DBTables, ComCtrls, ToolWin,
 Grids, DBGrids, Menus, Buttons,Registry, ImgList, USelDatos, Limite;
 
Const
 CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
 
..... //Aqui va la definicion del form
 
implementation
 
//Asigna los siguientes eventos a todos los DBGrid que tengas en tu form con campos Boolean.
 
// El siguiente evento cambia el estado del boolean Cuando clicamos en el
procedure TForm.DBGCellClick(Column: TColumn);
begin
 if (Column.Field.DataType = ftBoolean) then
 begin
  Column.Field.DataSet.Edit;
  Column.Field.AsBoolean := not Column.Field.AsBoolean;
  Column.Field.Dataset.Post;
 end;
end;
 
// El siguiente evento cambia el estado si pulsamos espacio estando seleccionado un campo boolean
procedure TForm.DBGKeyPress(Sender: TObject; var Key: Char);
begin
 with TDBgrid(Sender) do
 begin
  if (Key = ' ') and (SelectedField.DataType = ftBoolean) then
  begin
   SelectedField.Dataset.Edit;
   SelectedField.AsBoolean := not SelectedField.AsBoolean;
   SelectedField.Dataset.Post;
  end;
 end;
end;
 
// El siguinete evento dibuja la casilla con o sin marca segun el estado del campo
procedure TForm.DBGDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 with TDBgrid(Sender) do
 begin
  if Column.Field.DataType = ftBoolean then
  begin
   Canvas.FillRect(Rect);
   DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, CtrlState[Column.Field.AsBoolean]);
  end;
 end;
end;
 
// Aqui evitamos que la celda se ponga en modo edit aruinando la estetica
procedure TForm.DBGColEnter(Sender: TObject);
begin
 if TDBgrid(Sender).SelectedField.DataType = ftBoolean then
  TDBgrid(Sender).Options := TDBgrid(Sender).Options - [dgEditing];
end;
 
// Aqui reponemos el estado inicial al abandonar la celda.
procedure TForm.DBGColExit(Sender: TObject);
begin
 if TDBgrid(Sender).SelectedField.DataType = ftBoolean then TDBgrid(Sender).Options := Opciones;
end;


end.

MaMu 25-04-2008 23:35:32

Benditas sean las JEDI VCL

Utilizá TJvDBGrid y olvidate de tantos problemas.

ContraVeneno 25-04-2008 23:42:01

como ya te dijeron, este tema ya se ha tratado muchas veces. En muchas de esas veces, no es necesario escribir ni una sola línea de código.

Basta usar un dbgrid que tenga esa posibilidad, ya muchos la tienen.
DevExpress, por ejemplo, pero es de pago.

EL TjvDBGrid de las Jedi lo hace, es gratis y sencillo de instalar.

ingmichel 25-04-2008 23:48:42

cita
 
Cita:

Empezado por ContraVeneno (Mensaje 282720)
como ya te dijeron, este tema ya se ha tratado muchas veces. En muchas de esas veces, no es necesario escribir ni una sola línea de código.

Basta usar un dbgrid que tenga esa posibilidad, ya muchos la tienen.
DevExpress, por ejemplo, pero es de pago.

EL TjvDBGrid de las Jedi lo hace, es gratis y sencillo de instalar.

hola donde puedo conseguir el tjvdbgrid ?

MaMu 26-04-2008 20:41:41

Cita:

Empezado por ingmichel (Mensaje 282724)
hola donde puedo conseguir el tjvdbgrid ?

http://sourceforge.net/projects/jvcl

Loarik 16-06-2008 07:52:23

checkbox en dbgrid y scrollbar
 
Hola compañeros,
Por diversos motivos no puedo instalar componentes nuevos y he utilizado el codigo que indicais para dibujar checkbox en dbgrid, se muestran perfectamente pero al mover la barra de desplazamiento se borra todo y queda la columna vacia, os pasa a vosotros?, alguna solucion?


La franja horaria es GMT +2. Ahora son las 12:23:48.

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