Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Frames y inicialización de variables (https://www.clubdelphi.com/foros/showthread.php?t=5547)

__cadetill 25-11-2003 13:20:38

Frames y inicialización de variables
 
Hola a todos

Veamos como estamos de Frames :p

Estoy haciendo un Frame en el que tengo un TDBGrid. Éste se conectará a una tabla (no se cual en principio) y tendrá un cierto número de columnas

Tengo unas variables (arrays dinámicos) que tienen que almacenar nombre del campo de cada columna

Código:

  SetLength(Campos, RxDBGrid1.Columns.Count);
  for i := 0 to RxDBGrid1.Columns.Count - 1 do
    Campos[i] := RxDBGrid1.Columns[i].FieldName;

Pues bien, el problema es que no se dónde hacer esta inicialización. Está claro que si lo hago en la unit donde coloco el frame funciona correctamente, pero claro, quiero evitar escribir esta inicialización en cada form donde utilizaré el frame.

He probado reescribiendo el Create del Frame, pero, como es normal, allí todabía no se saben las columnas y me da unos Acces Violations muy bonitos.

Alguna sugerencia?

Gracias

roman 25-11-2003 15:45:33

¿Dónde vas a colocar el DataSource? Porque si es externo podrías usar una propiedad pública DataSource: TDataSource del frame y hacer la inicialización en el asignador de la propiedad.

// Saludos

__cadetill 25-11-2003 16:51:04

El DataSource irá en un DataModule, es decir, externo al Frame. Pero, creo que no te entendí ya que no veo que el Frame tenga la propiedad DataSource :s (estoy con Delphi 6 por si acaso)

FNADALO 25-11-2003 17:01:05

Hola Cadetill

Estuve con un Abm te acuerdas bien al final hice lo siguiente
en un DataModule el AdoConection y en un Frame
el AdoQuery y el DataSource puse en un boton del Frame
de busqueda la asignación del AdoQuery...... y el DataSource
y busque los campos y definiciones de estos para una tabla pasada por parámetro para rellenar un DbGrid y un ObjetoInspector.

Espero te sirva de Algo, una cosa cada vez hago un clear de las columnas del Grid y de los items del objectoInspector asi he conseguido un Abm para todas las tablas de Mantenimiento un
solo Frame con toda la lógica.

Saludos
Fernando Nadal
Palma de Mallorca.

roman 25-11-2003 17:13:59

Cita:

cadetill comentó:
no veo que el Frame tenga la propiedad DataSource :s (estoy con Delphi 6 por si acaso)
Je, je. Te hace falta un café bien cargado :p

Me refiero a que tú definas la propiedad:

Código:

TFrameGrid = class(TFrame)
private
  FDataModule: TDataModule;
  procedure SetDataModule(ADataModule: TDataModule);

public
  property DataModule: TDataModule read FDataModule write SetDataModule;
end;

...

procedure TFrameGrid.SetDataModule(ADataModule: TDataModule);
begin
  FDataModule := ADataModule;
 
  {  Código de inicialización }
end;

// Saludos

__cadetill 25-11-2003 18:14:05

jejeje, creo que sí necesito ese café :D (lástima que no me guste :p). Ya decía yo que no te había entendido :rolleyes:

Probaré lo que me indicais aunque lo he logrado solucionar de otra manera, redefiniendo el método Loaded del Frame

Código:

  public
    procedure Loaded; override;

.....

procedure TDBGridCombo.Loaded;
var
  i : integer;
begin
  inherited;

  SetLength(Campos, RxDBGrid1.Columns.Count);

  for i := 0 to RxDBGrid1.Columns.Count - 1 do
    Campos[i] := RxDBGrid1.Columns[i].FieldName;
end;

Esto me funciona, pero han de estar creadas las columnas en diseño (cosa que no me preocupa).

A las propuestas, no obstante, les veo un inconveniente (no se si será por el café que me falta) y es que puedo accedes a los TFields del Dataset, pero no necesariamente el TDBGrid ha de visualizarlos todos (no obstante, ya digo que lo probaré)

Gracias por las sugerencias :)

roman 25-11-2003 18:22:54

Realmente creo que no había entendido del todo lo que querías. Si el grid lo ajustas en tiempo de diseño entonces tu técnica del método Loaded es lo más adecuado.

// Saludos


La franja horaria es GMT +2. Ahora son las 18:04:52.

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