Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Mostrar check en dbGrid (https://www.clubdelphi.com/foros/showthread.php?t=9553)

Aprendiendo 26-04-2004 21:10:05

Mostrar check en dbGrid
 
Hola a tod@s.

Mi duda es la siguiente, trabajo con interbase 6 y resulta que no tiene un campo boolean, así que yo he creado un campo char(2) así grabo (si/no) según interese.

Resulta que cuando tengo una tabla que sólo tiene un campo (si/no) me funciona correctamente, pero cuando tiene varios sólo me muestra el último, os remito el código para ver donde me equivoco, lo coloco en el evento onDrawColumnCell.

procedure TFConModEliSeries.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 Tabla.IsEmpty then
begin
{ Campo 1. }
if CompareText(Column.FieldName, 'CAMPO1') = 0 then
begin
Check := 0;
if Tabla['CAMPO1'] = 'Si' 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, 'CAMPO2') = 0 then
begin
Check := 0;
if Tabla['CAMPO2'] = 'Si' 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, 'CAMPO3') = 0 then
begin
Check := 0;
if Tabla['CAMPO3'] = 'Si' 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;


Esperando una pronta respuesta por vuestra parte, reciban un cordial saludo...

Gracias de antemano. :) :cool: :)

roman 26-04-2004 21:22:32

Es difícil leer código sin indentar pero te comento que ante la falta de un campo booleano yo me iría más por usar un campo entero (1=true, 0=false) que te permite más fácil la conversión, por ejemplo, Tabla.FieldByName('campo').AsBoolean te permitirá leer o asignar el valor mediante las constantes true y false sin problemas.


// Saludos

Aprendiendo 28-04-2004 09:05:58

Igual no me explique, bien ocurre que quiero mostrar (si/no) en un dbGrid, pero que no me salga (si/no), me salga un checkbox, lo consigo sólo cuando tengo un campo como el que he especificado, cuando tengo tres como muestro en el código de arriba, sólo me muestra con un checkbox el último campo los dos anteriores los muestra como (si/no).

Gracias. :) :cool: :)

__cadetill 28-04-2004 10:27:52

Pásate por mi web y bajate la demo sobre el TRxDbGrid. En ella muestro como hacerlo.
No obstante, te aconsejo que sigas la recomendación de Román y que no uses campos Char/Varchar para este propósito, sino campos numericos con un Check a 1/0 donde 0 = false y 1 = true

Coco_jac 05-12-2005 21:54:49

Hola me interesa ese componente TRxDbGrid, el cual menciona Cadelli ,pero cual es tu webo?

ContraVeneno 06-12-2005 23:46:34

Tambien podrías consultar este artículo sobre como poner un CheckBox en un DBGrid.

Coco_jac 07-12-2005 21:14:51

Gracias Contraveneno, pero no engo un campo booleano en mi tabla, como haria ??


La franja horaria es GMT +2. Ahora son las 09:42:29.

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