Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   ¿ Se le puede dar la vuelta a un Dbgrid ? (https://www.clubdelphi.com/foros/showthread.php?t=45474)

Parsec 04-07-2007 15:16:40

¿ Se le puede dar la vuelta a un Dbgrid ?
 
Hola a tod@s,
un dbgrid presenta los datos con los títulos arriba y despliega los datos hacia abajo, ¿ se puede hacer al revés ?, los títulos abajo y los datos hacia arriba.
Utlizo delphi 7.
Saludos

Neftali [Germán.Estévez] 04-07-2007 15:58:04

Poderse, poderse, no se puede... Al menos con el estandard.
Otra cosa es que intentes simularlo...
No se si es una salvajada y lo importante que es para tí esta cuestión, pero se trataría de:

* El primer DBgrid colocarlo arriba sin los títulos (no recuerdo si se puede).
* Colocar abajo un segundo DBGrid que sólo tenga los títulos y sin registros (o desactivado o activado con una consulta que no devuelva nada).
* Ambos Grids deben tener las mismas columnas
* Lo que te quedaría sería sincronizar las acciones posibles que se puedan hacer sobre la fila de títulos en ambos DBGrid. Cambiar ancho, reordenar columnas,...

gabrielkc 04-07-2007 16:38:10

Puedes hacerlo con un stringgrid, te tocaría dibujar todos los datos... pero así aseguras el resultado.

primero sería cargar los datos en el stringgrid con un while a tu dataset, sería bueno que cancelaras la actualización del componente en lo que cargas los datos para que sea menos tardado y al final llamar el evento Paint del stringgrid.

para dibujar en el stringgrid se hace:

*la propiedad defaultdraw a false.
* en el Evento OnDrawCell harias

Código Delphi [-]
procedure Form1.StringGird1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 with StringGird1 do //con el stringgrid hacer
  begin
   if ARow=RowCount-1 then  ///Si es la última fila
    Canvas.Brush.Color:=StringGird1.FixedColor
   else
    Canvas.Brush.Color:=StringGird1.clWindow;
  with Canvas do  ///con el canvas del stringgrid1 hacer
   begin
    FillRect(Rect);//Rellenamos la Celda del color correspondiente
    DrawText(Handle,PChar(StringGrid.Cells[ACol,ARow]),-1,Linea,DT_CENTER);//dibujamos el Texto
   end;
end;

Tendrías que jugar con el procedimiento para darle el efecto tridimencional a la celda de los títulos y la alineación de la informacion, en el ejemplo se alinea al centro.

Parsec 04-07-2007 16:48:11

Muchas gracias a los dos, me pongo con ello y ya os comento los resultados.
Gracias de nuevo

roman 04-07-2007 17:05:37

Puedes hacer algo similar a lo que describe Neftalí pero en lugar de un segundo DBGrid para los títulos, usas un HeaderControl (pestaña Win32) que, básicamente es para eso, encabezados de columnas.

// Saludos

Neftali [Germán.Estévez] 04-07-2007 17:30:15

Cita:

Empezado por roman
...usas un HeaderControl (pestaña Win32) que, básicamente es para eso, encabezados de columnas.

Pues casi mejor...:D:D:D
Había oído varias veces este componente, pero nunca lo había utilizado.
Mejor este que lo comentado. Creas tantas secciones como columnas tiene el DBGrid, defines DragReorder a True y casi lo tienes todo. Controlar cuando cambies el ancho y la reornenación para hacer lo mismo en el DBGrid.


La franja horaria es GMT +2. Ahora son las 20:21:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi