Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Guardar Formato de Grilla!! (https://www.clubdelphi.com/foros/showthread.php?t=74731)

NicoDominguez 07-07-2011 14:45:18

Guardar Formato de Grilla!!
 
Hola Gente,

Este es mi primer post y necesito un poco de ayuda..

Mi problema es el siguiente, Tengo un Objeto que me encapsula la conexión un con StoredProcedure, un ejemplo seria el siguiente.

Código Delphi [-]
var
  sp     : TStoredProcedure;
begin
  sp:= TStoredProcedure.Create('proc_PRUEBA_NICO');
  sp.Charge_Parameter('cadena','hola');
  sp.Charge_Parameter('numero',5);
  sp.Open;
  DataSource1.DataSet:= sp.storedProcedure;
end;

Donde TStoredProcedure es la clase que se encarga de crear un objeto TMSStoredProc y donde se configura con el procedimiento pasado por parametro.

El problema concreto es darle el formato a la grilla que va a mostrar los datos del StoredProcedure, cuando hago esta asignacion:

Código Delphi [-]
DataSource1.DataSet:= sp.storedProcedure;

el formato de la grilla desaparece... =(

La alternativa mas viable que se me ocurre es darle formato en tiempo de ejecucion a la grilla, pero esto es un proceso muy pesado!!

otra opcion que tengo pero no se como hacerlo es.. darle formato a la grilla en tiempo de diseño y de alguna forma guardar ese formato y aplicarselo despues de asignar el DataSet del DataSource, pero la verdad es q no se como puedo hacer eso...

Saludos y muchas gracias

juanlaplata 07-07-2011 16:02:29

Bueno, no se a que te refieres con el formato de la grilla, ni tampoco que tipo de grilla utilizas.
Este es un ejemplo para el Ancho de las Columnas de un DBGrid.
Le asigna el mayor ancho entre texto del Titulo y el de la 1ra Fila de Datos.
En mi caso, ademas de tengo seteado el ColumnResize = True, con lo cual a 1ra impresion la grilla se ve bien, de ser necesario se pueden ampliar los anchos de columnas.
He leido tambien en este foro, un proceso que recorria la cantidad de registros a mostrar y se quedaba con el maximo ancho, el cual aplicaba.
Codigo del cual modifique hasta quedarme con este que muestro; por que me parecia muy denso el recorrido, etc.

Código Delphi [-]
procedure TFormXX.FormActivate(Sender: TObject);
var i:integer;
begin
for i:= 0 to DBGrid1.Columns.Count-1 do
    begin
    DBGrid1.Columns[i].Title.Alignment:= taCenter;
    DBGrid1.Columns[i].Width :=
          Max((DBGrid1.Canvas.TextWidth(DBGrid1.Columns[i].Field.AsString) +
               20),
              (DBGrid1.Canvas.TextWidth(DBGrid1.Columns[i].Title.Caption) +
               10))
               ;
    end;
end;

PD: Max (num1, num2); {Funcion de la Unit Math}

NicoDominguez 07-07-2011 16:17:27

Claro, pero en ese caso le estas dando un formato en tiempo de ejecucion, yo quiero evitar eso.. porque se la cantidad de columnas que me va a retornar el StoredProcedure.

a lo que me referia con darle formato en tiempo de diseño, es a la grilla setearle los titulos, colores, fuentes, etc... antes de compìlar, pero cuando se asigno el dataset en tiempo de ejecucion a la grilla le desaparece el formato...

PD: no especifique la grilla porque desde mi app se usan varias como las CRDBGrid y SMDBGrid

juanlaplata 07-07-2011 16:33:51

Bueno, prueba entonces, tal como dices. En tiempo de Diseño, al saber cuantas y cuales son las columnas de la grilla, las agregas y editas.
Con Click derecho sobre la grilla, abres el "Columns Editor"
Agregas todas y cada una de las columnas. setas la propiedades, ancho, titulo, etc. y la mas importante sera FieldName, que debera coincidir con el nombre de la columna del QUERY. Alli te quedara diseñada la grilla en tiempo de Diseño, valga la redundancia.

NicoDominguez 07-07-2011 16:56:39

Eso es lo q hice.. pero cuando en tiempo de ejecucion asigno el resultado del StoredProcedure el formato de la grilla se va... es mas.. cuando le hago un free al objeto el formato vuelve... el problema esta en la asignacion de dataset del datasource.
lo que yo necesito es de alguna forma:
1ro .- guardar el formato que le di a la grilla en tiempo de diseño ( alguna propiedad o algo.. )
2do .- asignar el dataset (esto hace que la grilla pierda el formato)
3ro .- volver a darle el formato a la grilla que habia guardado anteriormente, pero con los datos ya cargados del paso 2.

NicoDominguez 07-07-2011 17:44:46

bueno gente... lo resolvi de esta forma


var
A : Array of TSMDBColumn;
cantidad : integer;
iterator : integer;
color : TColor;
begin


cantidad := SMDBGrid1.Columns.Count;

SetLength(A, cantidad);

For iterator := 0 to cantidad -1 Do
Begin

A[iterator] := TSMDBColumn.Create(nil);
A[iterator].Color := SMDBGrid1.Columns[iterator].color;
A[iterator].Title := SMDBGrid1.Columns[iterator].Title;

End;


//-----------------------------------------


sp := TStoredProcedure.Create('proc_PRUEBA_NICO');

sp.Charge_Parameter( 'cadena','hola');
sp.Charge_Parameter( 'numero',5);

sp.Open;

DataSource1.DataSet := sp.storedProcedure;


//-----------------------------------------

For iterator := 0 to cantidad -1 Do
Begin

SMDBGrid1.Columns[iterator].TextEllipsis := teMiddle;
SMDBGrid1.Columns[iterator].Color := A[iterator].color;
SMDBGrid1.Columns[iterator].Title := A[iterator].Title;

End;

end;


La franja horaria es GMT +2. Ahora son las 02:18:09.

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