Cita:
Empezado por Nuria
No creo que pueda hacer lo de los Check con la modificación que me dijiste antes porque el campo Boolean NO es un campo de la tabla propiamente dicho, sino un campo calculado que me he creado yo. Ya veré como lo hago finalmente.
|
Bueno, supongo que será un entero con valores 1 o 0, no?
Si es así, prueba a poner....
Código:
if Column.Field.DataType = ftInteger then
begin
// Pintamos solo la celda booleana
if Column.Field.AsBoolean and (Pintar.ItemIndex = 1) then
begin
RxDBGrid1.Canvas.Brush.Color := clInfobk;
RxDBGrid1.Canvas.Font.Style := [fsBold];
RxDBGrid1.Canvas.Font.Color := ClBlack;
RxDBGrid1.DefaultDrawColumnCell(Rect,Datacol,Column,State);
end;
RxDBGrid1.Canvas.FillRect(Rect);
CheckBoxRectangle.Left := Rect.Left + 2;
CheckBoxRectangle.Right := Rect.Right - 2;
CheckBoxRectangle.Top := Rect.Top + 2;
CheckBoxRectangle.Bottom := Rect.Bottom - 2;
DrawFrameControl(RxDBGrid1.Canvas.Handle, CheckBoxRectangle,
DFC_BUTTON, CtrlState[Column.Field.AsInteger = 1]);
end;
En negrita las lineas que cambian. De esta manera te evitas el campo calculado. Luego, en el OnClick, sólo has de actualizar susodicho campo.
Atención: esta manera tiene un problema, y es que afectará a todos los campos de tipo Integer.
Solución: en lugar de mirar el tipo de campo, mirar por el nombre de campo
ej: if Column.Field.FieldName = 'MiCampoInteger' then
Espero te sirva