PDA

Ver la Versión Completa : CheckBox en un DBGrid


DJ VMan
25-06-2003, 17:51:35
trabando con 1 y 0, osea, "boolean" en MySQL, como se puede llegar hacer una grilla (DBGRid) que muestre dichos valores pero que los muestre como checkbox?

Yo lo hice con ExDBGrid (gran componente), en el cual se puede "asociar " un componente fuera de la grilla, y que "actue" dentro de la grilla, en una columna seleccionada. El problema de esto, es que sólo se muestra el checkbox cuando entro en modo de edición (o inserción) en la columna del campo "boolean".

Pero la idea es que se vean (los checkboxes) siempre, en todo momento. Asi como lo hace el access con sus valores booleanos.

__cadetill
25-06-2003, 20:43:15
En mi web tienes una demo de como funciona el RxDbGrid y en él muestro como poner un check, eso si, con campos booleanos, pero cambiando un poco el código seguro que consigues hacerlo con 1 y 0

DJ VMan
25-06-2003, 22:34:34
si me funciona. Pero sólo para mostrar datos, cuando quiero editar me aparece el 1 o el 0 (dependiendo).

Sólo tube que modificar la siguiente linea:

DrawFrameControl(RxDBGrid1.Canvas.Handle, CheckBoxRectangle, DFC_BUTTON, CtrlState[Column.Field.AsBoolean]);

por esta otra:

DrawFrameControl(RxDBGrid1.Canvas.Handle, CheckBoxRectangle, DFC_BUTTON, CtrlState[(Column.Field.AsInteger=1)]);

por cierto, había visto cosas por el estilo en otros lugares, pero esta está mucho más fácil. :p

Si puedieras ayudarme ..... por favor....

__cadetill
26-06-2003, 00:47:25
Posteado originalmente por DJ VMan
si me funciona. Pero sólo para mostrar datos, cuando quiero editar me aparece el 1 o el 0 (dependiendo).


Si, cierto, esto es ReadOnly. Como modificas/insertas los datos, en el mismo Grid o en una pantalla a parte?

Por cierto, supongo que esta linea de codigo tambien la habras modificado ;)

if Column.Field.DataType = ftBoolean then

por esta otra (o algo parecido)

if Column.Field.DataType = ftInteger then

DJ VMan
26-06-2003, 17:05:26
en efecto, tambien cambié esa linea, pero no como lo hiciste tu. Tube que identificar el campo que quería a través de su nombre, si lo hacía como tu propones, me fallaban otros campos integer que tenía la tabla.

pero....

COMO SOLUCIONO EL PROBLEMA?

una pseudo solución fue ocupar la dbgrilla ExDBGrid, la cual tiene el mismo evento DrawColumnCell, que tu ocupas en tu ejemplo. Pero además este componente te permite "asociar" un componente externo a la grilla (en este caso el checkbox), y que actue dentro de ella.

Asi que uniendo ambas cosas, solucioné el problema .... a medias....pero solución al fin y al cabo. Asi que si alguien tiene otra...QUE LO DIGA! porque esta no me gusta mucho.