sábado, 30 de julio de 2011

8.6 Edición de una celda

Bueno quizás esta sea la función donde se ha modificado más nuestro control. He tenido que añadir un módulo llamado var (para tener una variable global), un formulario Feditor(que es el que se muestra para que se introduzca los datos), y una funcion en el propio control.

A) Empezamos con la nueva función en la clase supergridviews (lo metemos en la zona 4):
'------------------------------
'funcion editar una celda
'-------------------------------
PUBLIC SUB edita(fila AS Integer, columna AS Integer)
DIM f AS NEW Feditor
var.editado = ME[fila, columna].text
IF ME.columns[columna].title = "Operación Producto" THEN
Message.Error("No es posible editar una columna de operaciones producto")
ELSE
f.caption = "Editando...Columna: " & ME.columns[columna].title & ", Fila: " & Str$(fila + 1)
f.Showmodal
ME[fila, columna].text = var.editado
ENDIF
END

Notas:
1. La fila y columna serán las que queremos editar, si hacemos click en el supergridviews en una celda, las propiedades que contienen esa informacion son:
fila = supergridviews1.Row
columna = supergridviews1.Column
2. El texto que contiene la celda (ME[fila, columna].text), lo pasamos a la variable global var.editado

3. Si la columna es una columna de “Operación Producto”, no la podemos editar... para ello comprobamos su titulo ( IF ME.columns[columna].title = "Operación Producto" THEN )

4. Creamos una copia del formulario Feditor ( DIM f AS NEW Feditor ), y le ponemos el titulo de la columna y fila editada, (f.caption = "Editando...Columna: " & ME.columns[columna].title & ", Fila: " & Str$(fila + 1))

  1. Lo mostramos: f.Showmodal
  2. Una vez que salimos del formulacion, asignamos el valor de var.editado a la celda:
    ME[fila, columna].text = var.editado


B) En el módulo Var, añadimos esta variable que va a ser global:
' Gambas module file

PUBLIC editado AS String

La cual será llamado desde otros módulo/clases/formularios como var.editado

C)Creamos el siguiente formulario con el nombre Feditor:
Un textbox, y 2 toolbutton (aceptar/cancelar), y al formulario le damos como feditor.Border=Fixed (borde fijo) y feditor.AutoResize=False (no se expande)



Y el siguiente código en el formulario:
' Gambas class file
PUBLIC SUB TextBox1_KeyPress()
IF Key.code = Key.Esc THEN
ToolButton2_Click()
ENDIF
IF Key.code = Key.Enter THEN
var.editado = TextBox1.text
ME.Close
ENDIF

IF Key.code = Key.Return THEN
var.editado = TextBox1.text
ME.Close
ENDIF

IF Key.code = Key.Tab THEN
ToolButton1.SetFocus
ENDIF

END


PUBLIC SUB Form_Open()
TextBox1.text = var.editado
ME.Center
END

PUBLIC SUB ToolButton1_Click()
var.editado = TextBox1.text
ME.Close
END

PUBLIC SUB ToolButton2_Click()
ME.Close
END


Como podéis adivinar, el ToolButton1 es el botón aceptar y el ToolButton2 es el botón cancelar.

Ahora pasamos al uso de estas nuevas funciones en nuestro programa “pruebacomponente”.
Aquí hemos añadimos un nuevo boton (que nos mostrara los datos de suma de columnas y multiplicacion), y modificado el hacer click en el supergridviews, para editar el dato de la celda.
PUBLIC SUB Buttonsumayproducto_Click()
PRINT supergridviews1.suma(0) 'sumamos la columna 0 y el resultado nos lo muestra en el terminal
PRINT supergridviews1.suma(1)'sumamos la columna 1 y el resultado nos lo muestra en el terminal
PRINT supergridviews1.suma(2)'sumamos la columna 2 y el resultado nos lo muestra en el terminal
PRINT supergridviews1.sumaproducto(1, 2)'añadimos columnas “producto columna” y nos muestra en la terminal la suma de los productos de la columna 1 y 2
END

PUBLIC SUB supergridviews1_Click()
'es necesario definir esta variables ya que directamente no podemos pasar los datos de .Row y .Column
DIM fila AS Integer
DIM columna AS Integer
supergridviews1.restaurartitulosiniciales()
fila = supergridviews1.Row
columna = supergridviews1.Column
supergridviews1.edita(fila, columna)
Buttonsumayproducto_Click()
END

Nota:
Como os comento en el código, es necesario definir las variables fila y columna, ya que directamente no podemos pasar los datos de supergridviews1.Row y supergridviews1.Column
DIM fila AS Integer
DIM columna AS Integer
supergridviews1.restaurartitulosiniciales()
fila = supergridviews1.Row
columna = supergridviews1.Column
Si ejecutamos el programa “pruebacomponente”, al hacer click sobre una celda, podremos editarla:

Podemos editar las fila de articulo, id y precios, y al pulsar el boton “sumas de columnas y productos de la 2 y 3 columna podemos tener el resultado siguiente:

No hay comentarios:

Publicar un comentario