FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; 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 |
#2
|
||||
|
||||
¿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 |
#3
|
|||
|
|||
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)
|
#4
|
||||
|
||||
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. |
#5
|
||||
|
||||
Cita:
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; |
#6
|
|||
|
|||
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; 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 |
#7
|
||||
|
||||
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 |
|
|
|