PDA

Ver la Versión Completa : ¿ Se le puede dar la vuelta a un Dbgrid ?


Parsec
04-07-2007, 15:16:40
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


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
...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.