![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Hola piltrafilla
![]() A ver, algunos comentarios En tu código veo.... Código:
if IBQ.AsBoolean then IBQ no es el TIBQuery?? Te falta el campo!!! ![]() Otra cosilla Si la celda booleana con valor true la pintas de la misma manera que toda la fila de la cual el campo booleano está en true... te sobra un DefaultDrawColumnCell. Te tendría que quedar así: Código:
procedure TfFacturas.RxDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
const CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,
DFCS_BUTTONCHECK or DFCS_CHECKED);
var CheckBoxRectangle : TRect;
begin
// Pintamos toda la fila de la celda booleana
// Para hacerlo tenemos que hacer referencia al campo booleano
if IBQCampoBooleano.AsBoolean then
begin
RxDBGrid1.Canvas.Brush.Color := clInfobk;
RxDBGrid1.Canvas.Font.Style := [fsBold];
RxDBGrid1.Canvas.Font.Color := ClBlack;
RxDBGrid1.DefaultDrawColumnCell(Rect,Datacol,Column,State);
end;
// campo Check
if Column.Field.DataType = ftBoolean then
begin
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.AsBoolean]);
end;
end;
He probado tu código (sólo que atacando a Paradox ya que he usado la demo de la web) y, a mi no me hace el efecto que indicas ![]() Los cambios que he hecho son.... Código:
procedure TDbGrid.RxDBGrid1CellClick(Column: TColumn);
begin
RxDBGrid1.DataSource.DataSet.Edit;
if RxDBGrid1.SelectedIndex = 0 then // Columna donde tengo el checkbox
RxDBGrid1.DataSource.DataSet.FieldByName('Preferred').AsBoolean :=
not RxDBGrid1.DataSource.DataSet.FieldByName('Preferred').AsBoolean;
RxDBGrid1.DataSource.DataSet.Post;
end;
)Última edición por __cadetill fecha: 31-03-2004 a las 16:24:06. Razón: Hacer una ampliación |
|
#2
|
||||
|
||||
|
Hola xiquitín!
Cita:
He probado lo que me has dicho en la demo y funciona a la perfección. He intentado hacerlo así: Código:
RxDBGrid1.DataSource.DataSet.Edit;
if RxDBGrid1.SelectedIndex = 0 then // Columna donde tengo el checkbox
RxDBGrid1.DataSource.DataSet.FieldByName('SEL').AsBoolean :=
not RxDBGrid1.DataSource.DataSet.FieldByName('SEL).AsBoolean;
RxDBGrid1.DataSource.DataSet.Post;
Código:
...DatabaseError.... 'IBQ: Cannot modify a read-only dataset' .Voy a seguir investigando y probando, cuando lo solucione que lo solucionaré te cuento. Muchas gracias 'apañero'. |
|
#3
|
|||
|
|||
|
Cita:
Te lo dejo a tu elección ![]() |
|
#4
|
||||
|
||||
|
Cita:
Pues fíjate tú, que nunca he usado el TIBUpdateSQL, acabo de meterme hace muy poco con los IBX, he estado investigando y creo que lo voy a usar en bastantes ocasiones...Gracias.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. Un saludillo! ![]() |
|
#5
|
|||
|
|||
|
Cita:
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;
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 |
|
#6
|
||||
|
||||
|
Muchas gracias de nuevo....
He probado lo que tú me comentabas y me hace lo mismo pero en vez de ponerme true/false pone 0/1... .Como te dije antes medianamente lo conseguí arreglar, pasando el foco a otra celda. Pero ahora además, me hace otra cosa ... cuando el grid tiene un montón de líneas pues me aparece el scroll vertical como es lógico, marco varios check, pincho en el scroll y voy bajando líneas, cuando vuelvo arriba me ha desmarcado todos los checks . En tú demo lo he probado y funciona correctamente.Así que sigo dandole vueltas al asunto... Un saludito! |
|
#7
|
|||
|
|||
|
Hola niña
Bueno, he hecho una prueba y ya he visto lo que te pasa ![]() En la prueba me pasaba lo mismo que a ti y decidí mirar qué diferencias había entre la configuración de un Grid y el otro Pues bien, el de la demo está en Option.dgEditing = false, es decir, no editable Esto puedes controlarlo, si quieres, en el evento OnColEnter, mirar si es la columna del campo Check y si lo es, poner dgEditing a false, sino, ponerlo a true ¿qué te parece la idea? |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|