DBControlGrid de diferentes colores

Utilizo un Dbcontrolgrid para mostrar las camas disponibles de un hotel, he dispuesto las columnas para que en una misma fila me salgan las dos camas que tiene la habitación fijando las columnas en dos, me gustaría que cada fila tuviese un color, así visualmente se distinguirían mejor las habitaciones. ¿Hay alguna manera de hacer poner cada fila de un color en un dbcontrolgrid?.

1 Respuesta

Respuesta
1
El DBGrid tiene un evento llamado OnDrawDataCell y aquí puedes dibujar una columna o determinadas columnas. Aquí ten envío el código
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
{ NOMBRE es el nombre del campo a pintar de otro color }
{ NOMBRE this the field name to paint in a diferent color }
if Field.FieldName = 'NOMBRE' then
(Sender as TDBGrid).Canvas.Font.Color := clRed; { En rojo / in red }
(Sender as TDBGrid).Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2,
Field.AsString);
end;
Checalo a ver si te funciona.
El DbCtrlGrid no tiene el evento OnDrawDataCell. Yo hiece esta variación
Usando el evento OnPaintPanel:
procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
Index: Integer);
begin
if Odd(Dbctrlgrid2.datasource.dataset.Fieldbyname('numHabitacion').asinteger) then
DBCtrlGrid1.Color:=clRed {Donde numHabitación el es numero de la habitación que tiene 2 camas, que aparecen en la misma fila, pero no acaba de funcionar por que me pinta la primera cama de la siguiente habitación del mismo color que la anterior}
else
DBCtrlGrid1.Color:=clBlue;
end;
Dbctrlgrid2.datasource.dataset.Fieldbyname('numHabitacion').asintegerene ese evento,
Usando el evento OnPaintPanel:
procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
Index: Integer);
begin
if Odd(DBCtrlGrid1.DataSource.DataSet.RecNo) then
DBCtrlGrid1.Color:=clRed
else
DBCtrlGrid1.Color:=clBlue;
end;
Juan Palomo, yo me lo guiso y yo me lo como.
Lo siento, busque mal y por eso no encontré yo la respuesta, muchas gracias de todas maneras.
Ah! Perdón no me había dado cuenta que me preguntabas por el DBControlGrid, pensé que era el DBGrid. Pero mira lo estuve checando y puse el mismo código que tienes y si efectivamente pinta todas.
El problema esta en la función Odd(), realmente nunca he trabajado este componente, pero lo que hice es poner la variable index en el if y comparalar por ejemplo con Index = 1 y ahí te pinta solo una celda a la que hace referencia el index entonces lo que podrías hacer ahí es de alguna manera saber cuantos renglones hay y sacar un pequeña fórmula para que te pinte las columnas por ejemplo:
Si tiene 3 renglones entonces incrementaras de 6 en 6 a partir del 3 lo que incrementaras es la comparación que hace el index si me explico, es decir haces una función donde te compara el index que va con los numero es que debe pintar.
Si espero me haya explicado..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas