![]() |
![]() |
![]() |
![]() |
![]() |
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é
![]() ![]() ![]() 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 |
![]() |
|
|
![]() |
|