domingo, 26 de junio de 2011

Módulo Gestión: Editar

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.



¿como elegimos el registro a editar? Propiedad .Row
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.









Registro Único: el campo ID
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





De esta forma la columna 17, tendra el dato id que nos ayudara a identificar el registro para editarlo.
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 botón Aceptar en modo Edición.



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