Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Frames y inicialización de variables

Hola a todos

Veamos como estamos de Frames

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
Responder Con Cita
  #2  
Antiguo 25-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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
Responder Con Cita
  #3  
Antiguo 25-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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)
Responder Con Cita
  #4  
Antiguo 25-11-2003
Avatar de FNADALO
FNADALO FNADALO is offline
Miembro
 
Registrado: oct 2003
Ubicación: Palma de Mallorca
Posts: 97
Poder: 21
FNADALO Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 25-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

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
Responder Con Cita
  #6  
Antiguo 25-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
jejeje, creo que sí necesito ese café (lástima que no me guste ). Ya decía yo que no te había entendido

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
Responder Con Cita
  #7  
Antiguo 25-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:57:08.


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
Copyright 1996-2007 Club Delphi