DataGridView: grillas paginadas
DataGridView muestra una lista de filas de una tabla en un Screen, con paginación nativa (Page Up/Down) sobre un subfile DDS. Sólo puede haber uno por Screen.
1. Ejemplo completo
@Properties {
Type : Screen
Name : SGRIDDEMO
}
@References {
Tables = ["tables/TLGRIDDEMO.warp"]
}
@Variables {
global {
VCodCli char(6)
VNombre char(20)
VCiudad char(15)
VTotal number(5)
VUltimo char(6)
}
}
@Layout {
DataGridView("GridDemo", 2, 2, 5)
[
Column("Codigo", &VCodCli)
Column("Nombre", &VNombre)
Column("Ciudad", &VCiudad)
]
}
@Source {
Event Load
For Each In GRIDDEMO Index GRIDDMNOM
&VCodCli = CodCli
&VNombre = Nombre
&VCiudad = Ciudad
LoadRow()
EndFor
EndEvent
Event Enter
&VTotal = 0
For Each Row
&VTotal = &VTotal + 1
&VUltimo = &VCodCli
EndFor
Message("Filas: " + String(&VTotal, 5) + " Ultimo: " + &VUltimo, Info)
EndEvent
}
2. Cargar la grilla: Event Load + LoadRow()
LoadRow() toma los valores actuales de las variables atadas a cada Column y agrega una fila a la grilla. Sólo es válido dentro de un For Each en el cuerpo de Event Load (ese For Each debe declarar Index). Carga todo el resultado en una sola pasada — Page Up/Down son scroll nativo del terminal sobre lo ya cargado; Load nunca vuelve a correr.
3. Leer la selección: RefreshSelectRow() y CurrentInput()
Cuando el cursor cae dentro del rectángulo de la grilla (encabezado, fila de atención o cualquier fila de datos), CurrentInput() devuelve el nombre de la grilla. RefreshSelectRow() relee la fila bajo el cursor y escribe cada columna (incluidas las Hidden) de vuelta en su variable atada — es la inversa de LoadRow():
Event Enter
&Control = CurrentInput()
If &Control = "GridDemo"
RefreshSelectRow()
Message("Seleccionaste: " + &VCodCli, Info)
EndIf
EndEvent
4. Recorrer todas las filas cargadas: For Each Row
For Each Row ... EndFor recorre todas las filas ya cargadas en el subfile (no la tabla de base de datos), escribiendo cada Column en su variable atada antes de cada iteración — misma dirección que RefreshSelectRow(). No admite Index/Where/When None porque no hay tabla que recorrer:
Event Enter
&VTotal = 0
For Each Row
&VTotal = &VTotal + 1
EndFor
EndEvent
5. Columnas ocultas (Hidden)
Column("ID Interno", &VIdInterno, Hidden)
Una columna Hidden carga su dato (participa en LoadRow()/RefreshSelectRow()/For Each Row) pero no muestra la celda ni el título de su encabezado — útil para llevar una clave interna sin ocupar espacio en pantalla.
6. Columnas editables (Input)
Column("Cantidad", &VCantidad, Input)
Permite que el usuario edite el valor directamente en la grilla.
7. Reglas a tener en cuenta
- El nombre (
"GridDemo") es obligatorio y único entreInput/DataGridViewde la misma pantalla. - Sólo un
DataGridViewporScreen. - Sólo válido dentro de
@Layoutde unScreen, nunca de unProgram.