Definir el objeto
Dim TB as tableview
TB=new tableview
TB=new tableview
Definir dimensiones del objeto
TB.columnos.count=5 ----> definimos cantidad de columnas
TB.rows.count=7 ----> definimos la cantidad de filas a mostrar simultáneamente
TB.rows.count=7 ----> definimos la cantidad de filas a mostrar simultáneamente
Definir cabeceras
TB.header=1 ----> definimos la cantidad de filas dedicadas a cabecera
TB.column[0].text="Cliente"
TB.column[0].width=150"
TB.column[1].text="Factura"
TB.column[1].width=60"
TB.column[2].text= ...
TB.column[2].width= ...
TB.column[0].text="Cliente"
TB.column[0].width=150"
TB.column[1].text="Factura"
TB.column[1].width=60"
TB.column[2].text= ...
TB.column[2].width= ...
Llenar el tableview con datos procedentes de una tabla
Dim Linea as integer, SwColor as boolean, Rec as result, Sql as result, Cn as Connection
Sql="Select * from clientes order by codigo"
TB.rows.count=Rec.count+1 ----> cantidad de líneas del recordset mas 1 de cabecera
Do while Rec.available
TB[Linea,0].text=Rec!Codigo
TB[Linea,0].background=iif(SwColor,Color.whilte,color.black) ---> alternar color de fondo para cada fila
TB[Linea,0].forecolor=iif(SwColor,Color.black,Color.white) ----> alternar color de tinta para cada fila
TB[Linea,0].allignment=2 ----> alineamiento a la izquierda
TB[Linea,1].text=Rec!Factura
TB[Linea,1].background=iif(SwColor,Color.whilte,color.black) ---> alternar color de fondo para cada fila
TB[Linea,1].forecolor=iif(SwColor,Color.black,Color.white) ----> alternar color de tinta para cada fila
TB[Linea,1].allignment=2 ----> alineamiento a la izquierda
TB[Linea,2].text=Rec!Fecha
TB[Linea,2].background=iif(SwColor,Color.whilte,color.black) ---> alternar color de fondo para cada fila
TB[Linea,2].forecolor=iif(SwColor,Color.black,Color.white) ----> alternar color de tinta para cada fila
TB[Linea,2].allignment=2 ----> alineamiento a la izquierda
...
Rec.movenext ---> pasar al siguiente registro
Linea+=1 ---> pasar a la siguiente linea
SwColor=not swcolor ---> para alternar el color de la siguiente fila
loop
Sql="Select * from clientes order by codigo"
TB.rows.count=Rec.count+1 ----> cantidad de líneas del recordset mas 1 de cabecera
Do while Rec.available
TB[Linea,0].text=Rec!Codigo
TB[Linea,0].background=iif(SwColor,Color.whilte,color.black) ---> alternar color de fondo para cada fila
TB[Linea,0].forecolor=iif(SwColor,Color.black,Color.white) ----> alternar color de tinta para cada fila
TB[Linea,0].allignment=2 ----> alineamiento a la izquierda
TB[Linea,1].text=Rec!Factura
TB[Linea,1].background=iif(SwColor,Color.whilte,color.black) ---> alternar color de fondo para cada fila
TB[Linea,1].forecolor=iif(SwColor,Color.black,Color.white) ----> alternar color de tinta para cada fila
TB[Linea,1].allignment=2 ----> alineamiento a la izquierda
TB[Linea,2].text=Rec!Fecha
TB[Linea,2].background=iif(SwColor,Color.whilte,color.black) ---> alternar color de fondo para cada fila
TB[Linea,2].forecolor=iif(SwColor,Color.black,Color.white) ----> alternar color de tinta para cada fila
TB[Linea,2].allignment=2 ----> alineamiento a la izquierda
...
Rec.movenext ---> pasar al siguiente registro
Linea+=1 ---> pasar a la siguiente linea
SwColor=not swcolor ---> para alternar el color de la siguiente fila
loop
Editar celdas
Para editar celdas se pueden utilizar dos métodos
* Disparar el método Edit durante el evento click (TB.edit)
* Disparar el método Edit durante el evento change (TB.edit). Este evento ocurre al cambia de celda activa.
En estos casos al cambiar de celda activa esta queda en modo de edición.
En el modo de edición el tableview queda sustuído por un textbox o un combobox, razón por la que los eventos asociados al tableview (como keypress o keyrelease) NO FUNCIONAN. Estos eventos solo funcionan en modo browse.
El método edit tiene dos formatos
TB.edit ---> para editar la celda en un textbox
TB.edit(array,variable) ---> para editar la celda en un textbox
Sub TB_change()
Dim Tabla as new string[]
Tabla.add("Opcion 1")
Tabla.add("Opcion 2")
if TB.columnat=2 ---> si estamos en la columna 3
TB.edit(tabla,true) --->editar en un combo con cpciones "opcion1" y "opcion 2". El valor true indica que el
combo será de solo lectura y por tanto solo se podrá elegir una opción
else
TB.edit ---> editar en textbox
endif
end sub
Dim Tabla as new string[]
Tabla.add("Opcion 1")
Tabla.add("Opcion 2")
if TB.columnat=2 ---> si estamos en la columna 3
TB.edit(tabla,true) --->editar en un combo con cpciones "opcion1" y "opcion 2". El valor true indica que el
combo será de solo lectura y por tanto solo se podrá elegir una opción
else
TB.edit ---> editar en textbox
endif
end sub
Acceso a celdas
TB[0,0] ----> la primera celda
TB[0,TB.columns.count-1] -----> última celda de primera fila
TB[1,2] ----> tercera celda de segunda columna
TB[TB.row,TB.col] ---> celda activa
TB[TB.rows.count-1,0] ---> primera celda de última fila
TB[TB.rows.count-1,TB.columns.count-1] ---> última celda de última fila
TB[0,TB.columns.count-1] -----> última celda de primera fila
TB[1,2] ----> tercera celda de segunda columna
TB[TB.row,TB.col] ---> celda activa
TB[TB.rows.count-1,0] ---> primera celda de última fila
TB[TB.rows.count-1,TB.columns.count-1] ---> última celda de última fila
Grabar los cambios a tabla
Cuando se ha editado una celda y se pulsa ENTER se ejecuta el evento SAVE que graba el cambio en el control tableview (estábamos editando en un textbox o un combobox). Este es el momento de grabar la fila
Es el momento de grabar la fila en la tabla
sub TB_save(row as integer,column as integer, value as string)
Dim Sql as string
Sql=update clientes set codigo=" & TB[TB.row,0].text & ", factura='" & TB[TB.row,1] & "' where codigo=" & CodigoAnterior
Cn.exec (Sql)
end sub
Dim Sql as string
Sql=update clientes set codigo=" & TB[TB.row,0].text & ", factura='" & TB[TB.row,1] & "' where codigo=" & CodigoAnterior
Cn.exec (Sql)
end sub