Una vez vez introducidos los datos de los registros, con el paso del tiempo, tenemos la necesidad de cambiarlos para actualiarlos (el tipico cambio de movil de empresa) o simplimente complementarlos con información que no teniamos. (por ejemplo la foto)
Pues bien, en este modulo voy a desarrolar el codigo necesario para hacerlo.Pues habria varias maneras, una de ellas seria pedir por ejemplo el dni del usuario y pasar a editarlo, a mi se me ocurre una “mas intuitiva” al usuario que es haciendo CLICK en la fila del gridViewDatos, y editar la fila donde hemos hecho el click, los datos que contiene.
Para ello tenemos la propiedad .Row del gridViewDatos, que nos indica en que fila hemos pulsado.Pero todavia nos faltaria un dato muy importante para poder editar el registro, sabiendo la fila, tenemos que saber el var.id del registro (numero que identifica “unicamente” un registro), ya que si elegimos otro campo (nombre, apellidos, etc), pueden coincidir varios registros con esos datos, poro no asi el ID.
Para ello a nuestro gridViewDatos, le vamos a añadir una columna (no hace falta darle anchura ni titulo) y en esa columna escribiremos el id del registro. Para ello hay que modificar:
MODULO TITULO:
Procedimiento: definir()
En la linea:
.columns.COUNT = 16
Habria que cambiarla por : .columns.COUNT = 17
Procedimiento: rellena()
Añadir la linea:
.GridViewDatos[a, 15].text = var.fecha_datos[a]
.GridViewDatos[a, 16].text = var.id[a]
END WITH
Los gridviews empiezan a contar desde 0, pero las columnas visibles empiezan desde 1, por lo tanto un gridview que tenga 5 columnas (.columns.COUNT = 5), realmente se cuenta “0,1,2,3,4” y si queremos poner un dato en la columna 5, debemos indicar al gridviews el 4. .GridViewDatos[a, 4].text = lo_que_sea |
Ahora pasamos al “editar” la fila-registro elegido y para indicar de algun modo que estamos en modo edicion, el gridviewdatos lo pondremos con la propiedad .enabled=False. Posteriormente cuanto terminemos la edicion volvera a su estado normal (.enabled=True).:
En el Formulario Fmain:
PUBLIC SUB GridViewDatos_Click()
gridViewDatos.enabled=false
gestion.editar(GridViewDatos[GridViewDatos.Row, 16].text)
END
De esta manera llamamos a un procedimiento que esta en el modulo gestion, llamado editar , que va a hacer la funcion de editar el registro con el ID que contiene la fila clickeada.
En el modulo Gestion:
Necesitamos buscar el numero de registro que contenga ese ID, eso lo resolvemos con una funcion que dado el id devuelva el nº de registro, o en el peor de los casos un mensaje de error:
PUBLIC FUNCTION buscarDadoId(id AS String) AS Integer
DIM a AS Integer
FOR a = 0 TO var.id.COUNT - 1
IF id = var.id[a] THEN
RETURN a
ENDIF
NEXT
Message.Error("No encuentro registro con este Id: " & ID)
RETURN -1
END
Nota Importante: los paranteceis () no son lo mismo que los corchetes [] Los parentesis () indica que son funciones que les pasa un valor, el que esta entre parentesis Los corchetes [] el el numero que ocupa el datos en una matriz o array. |
Esta función es llamada dentro de la subrutina principal editar.
PUBLIC SUB editar(id AS String)
DIM registro AS Integer
registro = buscarDadoId(id)
IF REGISTRO = -1 THEN
Message.Info("No es posible editar, datos corruptos")
ELSE
var.estado = "Edicion"
var.RegistroEditado = registro
WITH FMain
.PictureBoxFoto.Picture = picture[var.foto[registro]]
.TextBoxDNI.text = var.dni[registro]
.TextBoxNombre.text = var.nombre[registro]
.TextBoxApellidos.text = var.apellidos[registro]
.TextBoxEmpresa.text = var.empresa[registro]
.TextBoxPuesto.text = var.puesto[registro]
.TextBoxTelfEmpresa.text = var.telf_empresa[registro]
.TextBoxTelfParticular.text = var.telf_parti[registro]
.TextBoxFax.text = var.fax[registro]
.TextBoxMovilEmpresa.text = var.movil_empresa[registro]
.TextBoxMovilParticular.text = var.movil_parti[registro]
.TextBoxWEB.text = var.pag[registro]
.TextBoxDireccion.text = var.direccion[registro]
.TextBoxObs.text = var.observaciones[registro]
.TextBoxFecha.text = var.fecha_datos[registro]
.TextBoxCorreo.text = var.correo[registro]
END WITH
var.rutaimagen = var.foto[registro]
ENDIF
END
Ademas vamos a definir otra variable global (en el modulo var) PUBLIC estado AS String
PUBLIC registroeditado as integer
que indicara al programa que estamos “editando” y no “introduccion datos” eso servira para que los botones de Aceptar / Borrar / Cancelar actuen de diferente manera.El boton aceptar se debe de compartar de una forma distinta que cuando estamos introduciendo datos. ¿como lo hacemos? Pues con la variable global “estado” y un simple “If ….Then”, si el estado es “editando” haremos que al pulsar el boton aceptar este sobre escriba los nuevos datos en el mismo registro, si no estamos editando, pues añadiremos como explicamos anteriormente.
Os pongo el codigo modificado:Codigo del formulario FMAIN
PUBLIC SUB ButtonAceptar_Click()
IF var.estado<> "Edicion" then
'añadimos a la matriz los datos, no estamos editando... solo insertando nuevo registro
var.id.add("Id" & Str$(Now))
var.dni.add(TextBoxDNI.text)
var.nombre.add(TextBoxNombre.Text)
var.apellidos.add(TextBoxApellidos.Text)
var.empresa.add(TextBoxEmpresa.Text)
var.puesto.add(TextBoxPuesto.Text)
var.telf_empresa.add(TextBoxTelfEmpresa.Text)
var.telf_parti.add(TextBoxTelfParticular.text)
var.fax.add(TextBoxFax.Text)
var.movil_empresa.add(TextBoxMovilEmpresa.Text)
var.movil_parti.add(TextBoxMovilParticular.Text)
var.pag.add(TextBoxWEB.Text)
'en foto guardo la ruta donde esta la imagen
var.foto.add(var.rutaimagen)
var.direccion.add(TextBoxDireccion.Text)
var.observaciones.add(TextBoxObs.Text)
var.fecha_datos.add(TextBoxFecha.Text)
var.correo.Add(TextBoxCorreo.Text)
endif
if var.estado= "Edicion" then
var.dni[var.RegistroEditado] = TextBoxDNI.text
var.nombre[var.RegistroEditado] = TextBoxNombre.Text
var.apellidos[var.RegistroEditado] = TextBoxApellidos.Text
var.empresa[var.RegistroEditado] = TextBoxEmpresa.Text
var.puesto[var.RegistroEditado] = TextBoxPuesto.Text
var.telf_empresa[var.RegistroEditado] = TextBoxTelfEmpresa.Text
var.telf_parti[var.RegistroEditado] = TextBoxTelfParticular.text
var.fax[var.RegistroEditado] = TextBoxFax.Text
var.movil_empresa[var.RegistroEditado] = TextBoxMovilEmpresa.Text
var.movil_parti[var.RegistroEditado] = TextBoxMovilParticular.Text
var.pag[var.RegistroEditado] = TextBoxWEB.Text
'en foto guardo la ruta donde esta la imagen
var.foto[var.RegistroEditado] = var.rutaimagen
var.direccion[var.RegistroEditado] = TextBoxDireccion.Text
var.observaciones[var.RegistroEditado] = TextBoxObs.Text
var.fecha_datos[var.RegistroEditado] = TextBoxFecha.Text
var.correo[var.RegistroEditado] = TextBoxCorreo.Text
'se da por compluido el estado de edicion
var.estado=""
endif
'ponemos en blanco la propiedad .text de los texbox
PictureBoxFoto.Picture = Picture["icon:/96/gambas"]
TextBoxDNI.text = ""
TextBoxNombre.text = ""
TextBoxApellidos.text = ""
TextBoxEmpresa.text = ""
TextBoxPuesto.text = ""
TextBoxTelfEmpresa.text = ""
TextBoxTelfParticular.text = ""
TextBoxFax.text = ""
TextBoxMovilEmpresa.text = ""
TextBoxMovilParticular.text = ""
TextBoxWEB.text = ""
PictureBoxFoto.Picture = ""
TextBoxDireccion.text = ""
TextBoxObs.text = ""
TextBoxFecha.text = ""
TextBoxCorreo.text = ""
'escribimos en el gridviews el dato introducido
titulo.rellena()
'el setfocus lo ponemos justo al inicio de los datos
TextBoxDNI.SetFocus
'hacemos de nuevo accesible el gridViewDatos
gridViewDatos.enabled = True
END
Nota:
La parte del codigo en azul, es la parte añadida.
No hay comentarios:
Publicar un comentario