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 begin
if ARow=RowCount-1 then Canvas.Brush.Color:=StringGird1.FixedColor
else
Canvas.Brush.Color:=StringGird1.clWindow;
with Canvas do begin
FillRect(Rect); DrawText(Handle,PChar(StringGrid.Cells[ACol,ARow]),-1,Linea,DT_CENTER); 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.