Controles de Datos
La pestania Controles de Datos proporciona 8 controles conscientes de datos que se vinculan directamente a campos y conjuntos de resultados de base de datos. Estos controles muestran, navegan y editan datos de base de datos automaticamente sin codigo de sincronizacion manual.
TBrowse CT_BROWSE = 79
Cuadricula de datos de alto rendimiento para navegar y editar datos tabulares. Soporta modos vinculado a base de datos y virtual (bloques de codigo). El control de visualizacion de datos mas potente de HarbourBuilder.
| Propiedad | Tipo | Valor predet. | Descripcion |
oDataSource | Object | NIL | Componente de acceso a datos (TDBFTable, TSQLite, etc.) |
aCols | Array | {} | Matriz de objetos TBrowseColumn |
nRowCount | Numerico | 0 | Numero de filas visibles (solo lectura) |
nColCount | Numerico | 0 | Numero de columnas (solo lectura) |
nRowPos | Numerico | 1 | Posicion de fila actual en el area visible |
nColPos | Numerico | 1 | Posicion de columna actual |
lEditable | Logico | .F. | Permitir edicion en el lugar de celdas |
lVirtual | Logico | .F. | Usar modo virtual (datos suministrados via bloques de codigo) |
nVirtualRows | Numerico | 0 | Total de filas en modo virtual |
lShowHeaders | Logico | .T. | Mostrar fila de encabezados de columna |
lShowGrid | Logico | .T. | Mostrar lineas de cuadricula |
lAlternateColors | Logico | .F. | Alternar colores de fondo de filas |
nClrRowOdd | Color | heredado | Color de fondo de filas impares |
nClrRowEven | Color | heredado | Color de fondo de filas pares |
nClrSelected | Color | sistema | Color de resaltado de fila seleccionada |
Propiedades de TBrowseColumn
| Propiedad | Tipo | Valor predet. | Descripcion |
cHeading | String | "" | Texto del encabezado de columna |
cField | String | "" | Nombre del campo de base de datos a vincular |
bBlock | Block | NIL | Bloque de codigo que devuelve el valor de celda (modo virtual) |
nWidth | Numerico | 100 | Ancho de columna en pixeles |
nAlign | Numerico | 0 | Alineacion (0=izquierda, 1=centro, 2=derecha) |
cPicture | String | "" | Clausula de formato de imagen |
lEditable | Logico | .T. | Permitir edicion en esta columna |
Eventos de TBrowse
| Evento | Categoria | Descripcion |
OnClick | Accion | Usuario hizo clic en una celda. Parametros: nRow, nCol |
OnDblClick | Accion | Usuario hizo doble clic en una celda. Parametros: nRow, nCol |
OnRowChange | Navegacion | Fila actual cambiada. Parametros: nOldRow, nNewRow |
OnColChange | Navegacion | Columna actual cambiada. Parametros: nOldCol, nNewCol |
OnHeaderClick | Accion | Encabezado de columna pulsado (para ordenar). Parametros: nCol |
OnBeforeEdit | Edicion | Antes de comenzar la edicion de celda. Devuelva .F. para cancelar. Parametros: nRow, nCol |
OnAfterEdit | Edicion | Despues de confirmar la edicion. Parametros: nRow, nCol, xOldValue, xNewValue |
OnKeyDown | Teclado | Tecla presionada mientras el browse tiene el foco. Parametros: nKey |
OnPaint | Visualizacion | Pintado personalizado de celdas. Parametros: nRow, nCol, oCanvas |
OnVirtualData | Datos | Solicitud de datos para una fila virtual. Parametros: nRow, nCol. Debe devolver el valor de celda |
| Plataforma | Widget Nativo |
| Windows | ListView personalizada dibujada por el propietario (WC_LISTVIEW) |
| macOS | NSScrollView + NSTableView |
| Linux | GtkScrolledWindow + GtkTreeView |
TDBGrid CT_DBGRID = 80
Cuadricula de datos simplificada que genera columnas automaticamente a partir de los campos de la fuente de datos. Mas facil de usar que TBrowse cuando no se necesita personalizacion completa.
| Propiedad | Tipo | Valor predet. | Descripcion |
oDataSource | Object | NIL | Componente de acceso a datos a vincular |
lAutoColumns | Logico | .T. | Crear columnas automaticamente desde campos |
lEditable | Logico | .F. | Permitir edicion en el lugar |
lSortable | Logico | .T. | Permitir ordenar haciendo clic en encabezados |
| Evento | Categoria | Descripcion |
OnClick | Accion | Celda pulsada |
OnDblClick | Accion | Doble clic en celda |
OnRowChange | Navegacion | Fila actual cambiada |
OnAfterEdit | Edicion | Edicion de celda confirmada |
TDBNavigator CT_DBNAVIGATOR = 81
Barra de navegacion con botones para primero, anterior, siguiente, ultimo, insertar, eliminar, editar, guardar y cancelar operaciones en una fuente de datos.
| Propiedad | Tipo | Valor predet. | Descripcion |
oDataSource | Object | NIL | Componente de acceso a datos a navegar |
lShowInsert | Logico | .T. | Mostrar boton Insertar |
lShowDelete | Logico | .T. | Mostrar boton Eliminar |
lShowEdit | Logico | .T. | Mostrar boton Editar |
lConfirmDelete | Logico | .T. | Solicitar confirmacion antes de eliminar un registro |
| Evento | Categoria | Descripcion |
OnBeforeAction | Accion | Antes de una accion del navegador. Devuelva .F. para cancelar. Parametros: nAction |
OnAfterAction | Accion | Despues de completar una accion del navegador. Parametros: nAction |
TDBText CT_DBTEXT = 82
Etiqueta consciente de datos. Muestra automaticamente el valor de un campo de base de datos vinculado como texto de solo lectura.
| Propiedad | Tipo | Valor predet. | Descripcion |
oDataSource | Object | NIL | Componente de acceso a datos |
cField | String | "" | Nombre del campo a mostrar |
cPicture | String | "" | Clausula de formato de visualizacion |
TDBEdit CT_DBEDIT = 83
Entrada de texto consciente de datos. Vincula un control TEdit a un campo de base de datos para ver y editar.
| Propiedad | Tipo | Valor predet. | Descripcion |
oDataSource | Object | NIL | Componente de acceso a datos |
cField | String | "" | Nombre del campo a vincular |
cPicture | String | "" | Clausula de formato de entrada/visualizacion |
lReadOnly | Logico | .F. | Impedir edicion |
| Evento | Categoria | Descripcion |
OnChange | Accion | Valor del campo cambiado por el usuario |
OnValidate | Validacion | Validar antes de guardar. Devuelva .F. para rechazar. Parametros: xValue |
TDBComboBox CT_DBCOMBOBOX = 84
Combo box consciente de datos. Muestra una lista desplegable vinculada a un campo de base de datos. Util para campos de busqueda.
| Propiedad | Tipo | Valor predet. | Descripcion |
oDataSource | Object | NIL | Componente de acceso a datos |
cField | String | "" | Nombre del campo a vincular |
aItems | Array | {} | Lista de elementos seleccionables |
oLookupSource | Object | NIL | Fuente de datos de busqueda opcional para elementos |
cLookupField | String | "" | Campo de la fuente de busqueda a mostrar |
cLookupKey | String | "" | Campo clave de la fuente de busqueda |
| Evento | Categoria | Descripcion |
OnChange | Accion | Seleccion cambiada |
TDBCheckBox CT_DBCHECKBOX = 85
Casilla de verificacion consciente de datos. Vincula un campo logico (booleano) de base de datos a un control de casilla de verificacion.
| Propiedad | Tipo | Valor predet. | Descripcion |
oDataSource | Object | NIL | Componente de acceso a datos |
cField | String | "" | Nombre del campo logico a vincular |
cText | String | "" | Texto de etiqueta junto a la casilla |
xValueOn | Any | .T. | Valor que representa el estado marcado |
xValueOff | Any | .F. | Valor que representa el estado desmarcado |
| Evento | Categoria | Descripcion |
OnChange | Accion | Estado de verificacion cambiado |
TDBImage CT_DBIMAGE = 86
Visualizacion de imagen consciente de datos. Muestra una imagen almacenada en un campo BLOB de base de datos o referenciada por un campo de ruta de archivo.
| Propiedad | Tipo | Valor predet. | Descripcion |
oDataSource | Object | NIL | Componente de acceso a datos |
cField | String | "" | Nombre del campo BLOB o ruta de archivo |
lStretch | Logico | .F. | Estirar imagen para llenar el control |
lProportional | Logico | .T. | Mantener relacion de aspecto al estirar |
lIsPath | Logico | .F. | El campo contiene una ruta de archivo (no datos binarios) |
Ejemplo de Codigo: TBrowse con Base de Datos
// Un formulario de navegacion de datos con TBrowse, navegador y controles conscientes de datos
FUNCTION Main()
LOCAL oForm, oDB, oBrw, oNav
// Crear formulario
oForm := TForm():New()
oForm:cTitle := "Navegador de Clientes"
oForm:nWidth := 800
oForm:nHeight := 500
// Conectar a la base de datos
oDB := TSQLite():New()
oDB:cFile := "clientes.db"
oDB:lAutoConnect := .T.
// Crear el control de navegacion
oBrw := TBrowse():New( oForm )
oBrw:nLeft := 10
oBrw:nTop := 10
oBrw:nWidth := 780
oBrw:nHeight := 350
oBrw:oDataSource := oDB
oBrw:lAlternateColors := .T.
// Definir columnas
oBrw:AddColumn( "Id", "id", 60, 2 ) // alineado a la derecha
oBrw:AddColumn( "Nombre", "name", 200, 0 ) // alineado a la izquierda
oBrw:AddColumn( "Correo", "email", 250, 0 )
oBrw:AddColumn( "Ciudad", "city", 150, 0 )
// Eventos
oBrw:OnDblClick := { |r,c| EditRecord( oDB, r ) }
oBrw:OnHeaderClick := { |c| SortByColumn( oDB, oBrw, c ) }
oBrw:OnRowChange := { |o,n| UpdateStatus( n ) }
// Agregar barra de navegacion
oNav := TDBNavigator():New( oForm )
oNav:nLeft := 10
oNav:nTop := 370
oNav:oDataSource := oDB
oNav:lConfirmDelete := .T.
// Cargar datos y activar
oDB:Query( "SELECT * FROM clientes ORDER BY name" )
oForm:Activate()
RETURN NIL
8 Controles de Datos
Los controles de datos se sincronizan automaticamente con su fuente de datos. Cuando el usuario navega a un registro diferente, todos los controles vinculados se actualizan instantaneamente. Los cambios se escriben en la base de datos al guardar.