hola la idea inicial es hacer algo como esto para empezar
algo no directamete util solo para ver como se hace
la idea es que las rows se agregen automaticamnete segun se necesite y
sea un par de columnas editables el resto se actualize automaticamete
similar al gridview de .net
de momento las investigaciones probado con el grid normal y el de qt
y solo se como llenar la grilla mediante codigo
pero las celdas son readonly
?
edit
en gambas 2
Gridview Editable?
Objetivo: Gridview Editable?
última edición por codificador el Miercoles, 25 Enero 2012, 06:38; editado 2 veces
última edición por codificador el Miercoles, 25 Enero 2012, 06:38; editado 2 veces
Objetivo: Re: Gridview Editable?
última edición por jsbsan el Miercoles, 25 Enero 2012, 17:29; editado 1 vez
Prueba con TableView, es un control igual que el Gridview, pero editable.
Simplemente tendras que añadirle, que cuando el usuario pulse "Enter" o "Return" en la ultima fila y ultima columnas, le añada una fila mas al tableview. (usa el evento keypress) y se posicione el cursor en esa nueva fila, en la columna primera.
Este es parte del codigo que te puede orientar:
nota:
De echo buscando en el codigo fuente del gambas (gambas2-2.23.1/comp/src/gb.form/TableView.class), encontre como añadia las funciones de edicion al gridviews:
Simplemente tendras que añadirle, que cuando el usuario pulse "Enter" o "Return" en la ultima fila y ultima columnas, le añada una fila mas al tableview. (usa el evento keypress) y se posicione el cursor en esa nueva fila, en la columna primera.
Este es parte del codigo que te puede orientar:
PUBLIC ultimafila AS Integer
PUBLIC SUB _new()
GridView1.Rows.count = 1
GridView1.Columns.count = 2
GridView1.mode = 1
ultimafila = GridView1.Rows.count
END
PUBLIC SUB Form_Open()
END
PUBLIC SUB GridView1_Click()
IF GridView1.row = ultimafila - 1 THEN
gridview1.Rows.count += 1
ultimafila = gridview1.Rows.count
GridView1.Moveto(ultimafila - 1, 0)
ENDIF
END
PUBLIC SUB _new()
GridView1.Rows.count = 1
GridView1.Columns.count = 2
GridView1.mode = 1
ultimafila = GridView1.Rows.count
END
PUBLIC SUB Form_Open()
END
PUBLIC SUB GridView1_Click()
IF GridView1.row = ultimafila - 1 THEN
gridview1.Rows.count += 1
ultimafila = gridview1.Rows.count
GridView1.Moveto(ultimafila - 1, 0)
ENDIF
END
nota:
De echo buscando en el codigo fuente del gambas (gambas2-2.23.1/comp/src/gb.form/TableView.class), encontre como añadia las funciones de edicion al gridviews:
' gambas class file
INHERITS GridView
EXPORT
EVENT Save(Row AS Integer, Column AS Integer, Value AS String)
EVENT Insert
EVENT Click
PRIVATE $hTextBox AS TextBox
PRIVATE $hComboBox AS ComboBox
PRIVATE $hEditor AS Object
PRIVATE $bTextBox AS Boolean
PRIVATE $iCol AS Integer
PRIVATE $iRow AS Integer
PRIVATE $hWatcher AS Watcher
PUBLIC SUB _new()
DIM hObs AS Observer
hObs = NEW Observer(ME) AS "GridView"
$hWatcher = NEW Watcher(ME) AS "GridView"
$hComboBox = NEW ComboBox(ME.Window) AS "Editor"
$hComboBox.Ignore = TRUE
$hComboBox.Hide
$hTextBox = NEW TextBox(ME.Window) AS "Editor"
$hTextBox.Ignore = TRUE
$hTextBox.Border = FALSE
$hTextBox.Hide
END
PRIVATE SUB SaveEditor()
DIM sText AS String
IF NOT $hEditor THEN RETURN
sText = $hEditor.Text
IF sText = ME[$iRow, $iCol].Text THEN RETURN
RAISE Save($iRow, $iCol, sText)
ME[$iRow, $iCol].Refresh
END
PUBLIC SUB Save()
HideEditor
END
PUBLIC SUB Cancel()
HideEditor(TRUE)
END
PRIVATE SUB HideEditor(OPTIONAL bNoSave AS Boolean)
IF $hEditor THEN
IF NOT bNoSave THEN SaveEditor
$hEditor.Hide
$hEditor = NULL
ENDIF
END
PRIVATE SUB MoveEditor()
DIM X, Y AS Integer
IF NOT $hEditor THEN RETURN
X = ME.ScreenX - ME.Window.ScreenX
Y = ME.ScreenY - ME.Window.ScreenY - ME.Window.ClientY
'DEBUG $iRow;; $iCol
WITH ME[$iRow, $iCol]
X += .X
Y += .Y
$hEditor.Move(X, Y, .Width, .Height)
END WITH
'DEBUG
$hEditor.Font = ME.Font
$hEditor.Show
'DEBUG
END
PUBLIC SUB GridView_MouseDown()
HideEditor
END
PUBLIC SUB GridView_RowResize(Row AS Integer)
HideEditor
END
PUBLIC SUB GridView_ColumnResize(Column AS Integer)
HideEditor
END
PUBLIC SUB GridView_Scroll()
HideEditor
END
PUBLIC SUB GridView_Resize()
HideEditor
END
PUBLIC SUB GridView_Hide()
HideEditor
END
PUBLIC SUB GridView_Change()
HideEditor
END
PUBLIC SUB Edit(OPTIONAL List AS String[], OPTIONAL ReadOnly AS Boolean)
'DEBUG
HideEditor
$iCol = ME.Column
$iRow = ME.Row
IF $iCol < 0 OR $iRow <0> 0
DEC ME.Row
RAISE Click
IF $hEditor THEN
STOP EVENT
BREAK
ENDIF
WEND
CASE Key.Down
WHILE ME.Row <ME> 0 THEN RETURN
DO
IF ME.Column > 0 THEN
DEC ME.Column
RAISE Click
ELSE IF ME.Row > 0 THEN
ME.MoveTo(ME.Row - 1, ME.Columns.Count - 1)
RAISE Click
ELSE
BREAK
ENDIF
IF $hEditor THEN
TRY $hEditor.Pos = $hEditor.Length
STOP EVENT
BREAK
ENDIF
LOOP
CASE Key.Right
IF $bTextBox AND IF $hEditor.Pos < $hEditor.Length THEN RETURN
DO
IF ME.Column < (ME.Columns.Count - 1) THEN
INC ME.Column
RAISE Click
ELSE IF ME.Row < (ME.Rows.Count - 1) THEN
ME.MoveTo(ME.Row + 1, 0)
RAISE Click
ELSE
BREAK
ENDIF
IF $hEditor THEN
TRY $hEditor.Pos = 0
STOP EVENT
BREAK
ENDIF
LOOP
CASE Key.Enter, Key.Return
IF $bTextBox THEN
DO
IF ME.Column < (ME.Columns.Count - 1) THEN
INC ME.Column
RAISE Click
ELSE IF ME.Row < (ME.Rows.Count - 1) THEN
ME.MoveTo(ME.Row + 1, 0)
RAISE Click
ELSE
RAISE Insert
STOP EVENT
BREAK
ENDIF
IF $hEditor THEN
TRY $hEditor.Pos = 0
STOP EVENT
BREAK
ENDIF
LOOP
ENDIF
END SELECT
END
INHERITS GridView
EXPORT
EVENT Save(Row AS Integer, Column AS Integer, Value AS String)
EVENT Insert
EVENT Click
PRIVATE $hTextBox AS TextBox
PRIVATE $hComboBox AS ComboBox
PRIVATE $hEditor AS Object
PRIVATE $bTextBox AS Boolean
PRIVATE $iCol AS Integer
PRIVATE $iRow AS Integer
PRIVATE $hWatcher AS Watcher
PUBLIC SUB _new()
DIM hObs AS Observer
hObs = NEW Observer(ME) AS "GridView"
$hWatcher = NEW Watcher(ME) AS "GridView"
$hComboBox = NEW ComboBox(ME.Window) AS "Editor"
$hComboBox.Ignore = TRUE
$hComboBox.Hide
$hTextBox = NEW TextBox(ME.Window) AS "Editor"
$hTextBox.Ignore = TRUE
$hTextBox.Border = FALSE
$hTextBox.Hide
END
PRIVATE SUB SaveEditor()
DIM sText AS String
IF NOT $hEditor THEN RETURN
sText = $hEditor.Text
IF sText = ME[$iRow, $iCol].Text THEN RETURN
RAISE Save($iRow, $iCol, sText)
ME[$iRow, $iCol].Refresh
END
PUBLIC SUB Save()
HideEditor
END
PUBLIC SUB Cancel()
HideEditor(TRUE)
END
PRIVATE SUB HideEditor(OPTIONAL bNoSave AS Boolean)
IF $hEditor THEN
IF NOT bNoSave THEN SaveEditor
$hEditor.Hide
$hEditor = NULL
ENDIF
END
PRIVATE SUB MoveEditor()
DIM X, Y AS Integer
IF NOT $hEditor THEN RETURN
X = ME.ScreenX - ME.Window.ScreenX
Y = ME.ScreenY - ME.Window.ScreenY - ME.Window.ClientY
'DEBUG $iRow;; $iCol
WITH ME[$iRow, $iCol]
X += .X
Y += .Y
$hEditor.Move(X, Y, .Width, .Height)
END WITH
'DEBUG
$hEditor.Font = ME.Font
$hEditor.Show
'DEBUG
END
PUBLIC SUB GridView_MouseDown()
HideEditor
END
PUBLIC SUB GridView_RowResize(Row AS Integer)
HideEditor
END
PUBLIC SUB GridView_ColumnResize(Column AS Integer)
HideEditor
END
PUBLIC SUB GridView_Scroll()
HideEditor
END
PUBLIC SUB GridView_Resize()
HideEditor
END
PUBLIC SUB GridView_Hide()
HideEditor
END
PUBLIC SUB GridView_Change()
HideEditor
END
PUBLIC SUB Edit(OPTIONAL List AS String[], OPTIONAL ReadOnly AS Boolean)
'DEBUG
HideEditor
$iCol = ME.Column
$iRow = ME.Row
IF $iCol < 0 OR $iRow <0> 0
DEC ME.Row
RAISE Click
IF $hEditor THEN
STOP EVENT
BREAK
ENDIF
WEND
CASE Key.Down
WHILE ME.Row <ME> 0 THEN RETURN
DO
IF ME.Column > 0 THEN
DEC ME.Column
RAISE Click
ELSE IF ME.Row > 0 THEN
ME.MoveTo(ME.Row - 1, ME.Columns.Count - 1)
RAISE Click
ELSE
BREAK
ENDIF
IF $hEditor THEN
TRY $hEditor.Pos = $hEditor.Length
STOP EVENT
BREAK
ENDIF
LOOP
CASE Key.Right
IF $bTextBox AND IF $hEditor.Pos < $hEditor.Length THEN RETURN
DO
IF ME.Column < (ME.Columns.Count - 1) THEN
INC ME.Column
RAISE Click
ELSE IF ME.Row < (ME.Rows.Count - 1) THEN
ME.MoveTo(ME.Row + 1, 0)
RAISE Click
ELSE
BREAK
ENDIF
IF $hEditor THEN
TRY $hEditor.Pos = 0
STOP EVENT
BREAK
ENDIF
LOOP
CASE Key.Enter, Key.Return
IF $bTextBox THEN
DO
IF ME.Column < (ME.Columns.Count - 1) THEN
INC ME.Column
RAISE Click
ELSE IF ME.Row < (ME.Rows.Count - 1) THEN
ME.MoveTo(ME.Row + 1, 0)
RAISE Click
ELSE
RAISE Insert
STOP EVENT
BREAK
ENDIF
IF $hEditor THEN
TRY $hEditor.Pos = 0
STOP EVENT
BREAK
ENDIF
LOOP
ENDIF
END SELECT
END
última edición por jsbsan el Miercoles, 25 Enero 2012, 17:29; editado 1 vez
Objetivo: Re: Gridview Editable?
hola si el código se parece a lo que estaba haciendo
sin embargo sigo sin poder editar
al ejecutar el programa las celdas son de solo lectura
esto es lo que tengo
ahora
en el formulario un tableview y un gridview
para ir probando solamente
sobre la clase del código fuente de gambas no entendí que hacer
ni como usarla
sin embargo sigo sin poder editar
al ejecutar el programa las celdas son de solo lectura
esto es lo que tengo
ahora
en el formulario un tableview y un gridview
para ir probando solamente
' gambas class file
PUBLIC ultimafila AS Integer
PUBLIC SUB _new()
''Relleno de la grilla explicitamente
GridView1.Rows.count = 1
GridView1.Columns.count = 2
GridView1.mode = 1
ultimafila = GridView1.Rows.count
TableView1.Columns.Count = 2
TableView1.Rows.Count = 3
TableView1.Mode = 1
TableView1.Mode = 12
' gridview1.hi
END
''Relleno de la grilla explicitamente
'TableView1..count = 1
'TableView1.Columns.count = 2
'TableView1.mode = 1
'ultimafila = TableView1.Rows.count
'END
PUBLIC SUB Form_Open()
END
PUBLIC SUB GridView1_KeyPress()
' gridview1.
END
PUBLIC SUB GridView1_Click()
IF GridView1.row = ultimafila - 1 THEN
gridview1.Rows.count += 1
ultimafila = gridview1.Rows.count
GridView1.Moveto(ultimafila - 1, 0)
ENDIF
END
PUBLIC ultimafila AS Integer
PUBLIC SUB _new()
''Relleno de la grilla explicitamente
GridView1.Rows.count = 1
GridView1.Columns.count = 2
GridView1.mode = 1
ultimafila = GridView1.Rows.count
TableView1.Columns.Count = 2
TableView1.Rows.Count = 3
TableView1.Mode = 1
TableView1.Mode = 12
' gridview1.hi
END
''Relleno de la grilla explicitamente
'TableView1..count = 1
'TableView1.Columns.count = 2
'TableView1.mode = 1
'ultimafila = TableView1.Rows.count
'END
PUBLIC SUB Form_Open()
END
PUBLIC SUB GridView1_KeyPress()
' gridview1.
END
PUBLIC SUB GridView1_Click()
IF GridView1.row = ultimafila - 1 THEN
gridview1.Rows.count += 1
ultimafila = gridview1.Rows.count
GridView1.Moveto(ultimafila - 1, 0)
ENDIF
END
sobre la clase del código fuente de gambas no entendí que hacer
ni como usarla
Objetivo: Re: Gridview Editable?
última edición por jsbsan el Jueves, 26 Enero 2012, 19:49; editado 2 veces
Mira, he encontrado este ejemplo que te puede servir, creo que es lo que quieres hacer....Cuando llegas a la ultima celda, te añade automaticamente una linea y te vas a la primera columna de esa fila.
Lo subi hace tiempo en mi antiguo blog:
NNuevo ejemplo de tableviews presupuestos descompuesto de una unidad
Nota:
El codigo de la clase que subi antes, se supone que es de como esta programado el tableview, pero no he podido ponerlo en funcionamiento...
Lo subi hace tiempo en mi antiguo blog:
NNuevo ejemplo de tableviews presupuestos descompuesto de una unidad
Nota:
El codigo de la clase que subi antes, se supone que es de como esta programado el tableview, pero no he podido ponerlo en funcionamiento...
última edición por jsbsan el Jueves, 26 Enero 2012, 19:49; editado 2 veces
Presupuesto-0.0.1.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | Presupuesto-0.0.1.tar.gz | |
Tamaño: | 13.33 KB | |
Descargado: | 59 veces |
Presupuesto-0.0.1.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | Presupuesto-0.0.1.tar.gz | |
Tamaño: | 13.33 KB | |
Descargado: | 59 veces |
Presupuesto-0.0.1.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | Presupuesto-0.0.1.tar.gz | |
Tamaño: | 13.33 KB | |
Descargado: | 59 veces |
Página 1 de 1
No puede crear mensajesNo puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario
Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Página generada en:: 0.2435s (PHP: 28% SQL: 72%)
Consultas SQL: 28 - Debug off - GZIP Activado