Autor Tema: Edición datagridview (editar, guardar) en tiempo de ejecución Visual Basic  (Leído 59071 veces)

leopola

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Antes que nada me presento.

Mi nombre es Leopoldo Miracco. Soy de Argentina, Pcia. de Bs. As, ciudad de Azul.

Estoy dando mis primeros pasos en Visual Basic.Net. Me ha ido bastante bien y le he tomado la mano bastante.

Hasta que por necesidad me metí con bases de datos y se complica un toque...

Tengo la siguiente problemática:

Estoy con una única tabla en access, con VB.Net.

He logrado editar y guardar en tiempo de ejecución los datos mostrados en el datagridview.

De todas formas para ingresar un nuevo registro lo hago a través de otro Form.

Y en él, no aparece el textbox EDAD, ya que al ingresar la fecha de nacimiento con el cálculo obtengo la edad y se graba con el resto del registro, apareciendo en el datagridview.

Ahora bien, en primer instancia dejo deje de solo lectura las columnas EDAD y FECHA DE NACIMIENTO.

Pero pregunto ¿es posible, editar en el datagridview como hago con el resto de los datos, la fecha de nacimiento y que al grabar, en la columna EDAD de su respectiva Fila se actualice la edad, en tiempo de ejecución?

Es decir, no se cómo hacerlo, si debo borrar antes el valor en la celda EDAD, y tampoco se cómo recorrer el datagridview... Pensaba en la posibilidad de cada vez que oprimo Guardar de una edición, actualizar toda la columna EDAD, digo porque saber en el momento que se esta editando que celdas de la columna fecha de nacimiento se han editado quizás sea mucho mas complejo. En fin, si no me hice entender me dicen sin problemas, que rehago la consulta. Ustedes me van a saber decir que es lo que me conviene y lo que no.

Desde ya muchas gracias!!! Saludos desde Argentina! Leopoldo.
« Última modificación: 02 de Marzo 2016, 08:16 por César Krall »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 379
    • Ver Perfil
Re:Edición datagridview en tiempo de ejecución
« Respuesta #1 en: 09 de Julio 2014, 10:57 »
Hola Leopoldo y bienvenido por estos foros donde habemos personas desde España hasta la Patagonia hablando de programación y no sólo de eso, también de todo un poco.

Por lo que he entendido:

La edad se calcula automáticamente al ingresar la fecha de nacimiento

Tienes Edad y Fecha de nacimiento como de sólo lectura.


Sobre la pregunta: ¿es posible, editar en el datagridview como hago con el resto de los datos, la fecha de nacimiento y que al grabar, en la columna EDAD de su respectiva Fila se actualice la edad, en tiempo de ejecución?

La respuesta es sí: para ello lo que tendrías que hacer es detectar el evento de cambio de la celda Fecha de Nacimiento, y en ese momento cambiar el atributo Edad.

Tal y como yo lo entiendo, tendrías que quitar la propiedad de solo lectura a los atributos para que puedas modificarlos.

Es decir: cada vez que se modifique la celda Fecha de nacimiento del datagridview, actualizar la celda Edad correspondiente.

Saludos cordiales

leopola

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Edición datagridview en tiempo de ejecución
« Respuesta #2 en: 09 de Julio 2014, 16:52 »
Hola javi in the sky!!!
Desde ya muchas gracias! por responder, a uno del otro lado le da muchas ganas de meterle a esto de la programación.

El tema es que no me he explicado bien, perdón!

Los datos los ingreso desde otro Form, es decir a través de textbox's pero el textbox EDAD no, porque a partir de la fecha de nacimiento que ingresan en el textbox "Fecha de nacimiento" calculo la edad y al presionar Guardar se agrega el registro, aparece el datagridview actualizado con la edad correspondiente automáticamente.

Así:

Código: [Seleccionar]
Dim fecha As Date
                Dim hoy As Date = Now
                Dim dias As Integer
                Dim Edad As Integer

                fecha = TextBoxFechaNacimiento.Text
                dias = DateDiff(DateInterval.Day, fecha, hoy)
                'FIX toma la parte entera
                Edad = Fix(dias / 365.25)

                Dim comand As New OleDbCommand
                comand.Connection = conexion
                comand.CommandText = "insert into Alumnos (APELLIDO,NOMBRES,DNI,EDAD,CURSO,TURNO,DOMICILIO,TELEFONO,SEXO,MODALIDAD,FECHA_DE_NACIMIENTO,LUGAR_DE_NACIMIENTO,ESCUELA_DE_PROCEDENCIA,ES_REPITENTE_SI_NO,ADEUDA_MATERIAS,MATERIAS_QUE_ADEUDA,OBSERVACIONES) values ('" & TextBoxNuevoApellido.Text & "', '" & TextBoxNuevoNombres.Text & "', '" & TextBoxNuevoDni.Text & "', '" & Edad & "', '" & TextBoxCurso.Text & "', '" & TextBoxTurno.Text & "', '" & TextBoxDomicilio.Text & "', '" & TextBoxTelefono.Text & "', '" & TextBoxSexo.Text & "', '" & TextBoxModalidad.Text & "', '" & TextBoxFechaNacimiento.Text & "', '" & TextBoxLugarNacimiento.Text & "', '" & TextBoxEscuelaProcedencia.Text & "', '" & TextBoxEsRepitente.Text & "', '" & TextBoxAdeudaMaterias.Text & "', '" & TextBoxMateriasAdeuda.Text & "', '" & TextBoxObservaciones.Text & "')"
                comand.ExecuteNonQuery()
                MsgBox("Alumno Cargado")
                Form1.mostrardatos()

Ahora bien, mientras estamos mirando el datagridview tengo dos botones 1 Editar, 2 Guardar edición.
Para poder editar los datos ingresados desde el otro Form a partir de los textbox, la diferencia es que los edito y los guardo en el mismo datagridview.
El tema es que si modifico la "Fecha de Nacimiento" previamente dejando la opción de sólo lectura en FALSE, no se me actualiza la EDAD obviamente porque no lo he contemplado y no se cómo hacerlo...

Con este botón edito:

Código: [Seleccionar]
Private Sub ButtonEditarGuardar_Click(sender As Object, e As EventArgs) Handles ButtonEditar.Click
        DataGridView1.ReadOnly = False
        DataGridView1.Columns("FECHA_DE_NACIMIENTO").ReadOnly = False
        DataGridView1.Columns("EDAD").ReadOnly = True
    End Sub

Con este Guardo en el mismo datagridview

Código: [Seleccionar]
Private Sub ButtonGuardarEdicion_Click(sender As Object, e As EventArgs) Handles ButtonGuardarEdicion.Click
        Try
            If Not conexion.State = ConnectionState.Open Then
                conectar()
                'aca si no esta abierta la base de datos la abrimos
            End If
            Dim GuardarEdicion As OleDbCommandBuilder
            GuardarEdicion = New OleDbCommandBuilder(da)
            da.Update(dt)
            MsgBox("Se han Actualizado los Datos Modificados")

            TextBoxFiltrarApellido.Text = ""
            TextBoxFiltrarDni.Text = ""
            DataGridView1.ReadOnly = True
            dt.Dispose()
            conexion.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

lo que no se es precisamente editar la fecha de nacimiento en el datagridview y que me  actualice la EDAD.
Desde ya muchas gracias!!!!! Leopoldo

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 379
    • Ver Perfil
Re:Edición datagridview en tiempo de ejecución
« Respuesta #3 en: 10 de Julio 2014, 09:41 »
La idea que me parece podría funcionar es la siguiente: justo antes de guardar, actualizar el valor de EDAD. De este modo, se guardará el valor de EDAD actualizado.

Sería esto (no lo he probado, pero es la idea):

Private Sub ButtonGuardarEdicion_Click(sender As Object, e As EventArgs) Handles ButtonGuardarEdicion.Click

DataGridView1.Columns("EDAD").Value =
Fix (DataGridView1.Columns("FECHA_DE_NACIMIENTO").Value / 365.25)

        Try
        ... resto del código que da lugar al guardado de los cambios


Si de esta manera logras actualizar el valor de edad justo antes de guardar, ya tendrás la actualización hecha de forma automática cada vez que realices una modificación.

Saludos

leopola

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Edición datagridview en tiempo de ejecución
« Respuesta #4 en: 11 de Julio 2014, 18:53 »
Hola javi!
Ya lo estoy probando y te cuento!  antes de probar ya le veo buena pinta!
En algunas horas cuento el resultado!
Desde ya muchas gracias!!!!!

leopola

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Edición datagridview en tiempo de ejecución
« Respuesta #5 en: 16 de Julio 2014, 01:22 »
Bueno, gracias a Javi! a partir del puntapié inicial que me dio, lo adapte para mis necesidades y salió bien, quedó algo así! por si alguien también lo necesita!

Código: [Seleccionar]
Dim fecha As Date
        Dim hoy As Date = Now
        Dim dias As Integer
        Dim Edad As Integer

        For Fila As Integer = 0 To DataGridView1.Rows.Count - 1
            If DataGridView1.Rows(Fila).Cells("FECHA_DE_NACIMIENTO").Value = Nothing Then
                Exit For
            Else
                fecha = DataGridView1.Rows(Fila).Cells("FECHA_DE_NACIMIENTO").Value
                dias = DateDiff(DateInterval.Day, fecha, hoy)

                'FIX toma la parte entera
                Edad = Fix(dias / 365.25)
                Me.DataGridView1.Rows(Fila).Cells("EDAD").Value = Edad.ToString
                Me.DataGridView1.Rows(Fila).Cells("ESTADO").Value = "ACTIVO"
            End If
        Next

        Try
            Dim GuardarEdicion As OleDbCommandBuilder
            GuardarEdicion = New OleDbCommandBuilder(da)
            da.Update(dt)
            MsgBox("Se han Actualizado los Datos Modificados")

            TextBoxFiltrarApellido.Text = ""
            TextBoxFiltrarDni.Text = ""
            TextBoxFiltrarCurso.Text = ""
            TextBoxFiltrarTurno.Text = ""
            TextBoxFiltrarSexo.Text = ""
            TextBoxFiltrarRepitente.Text = ""
            TextBoxFiltrarAdeudaMaterias.Text = ""
            DataGridView1.ReadOnly = True
            dt.Dispose()
            conexion.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

Desde ya muchas, pero muchas gracias! Abrazo y seguro después sigo molestando con alguna otra cuestión!!!!

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 379
    • Ver Perfil
Re:Edición datagridview en tiempo de ejecución
« Respuesta #6 en: 16 de Julio 2014, 08:11 »
Siempre es de agradecer saber qué ocurrió y cómo quedó el código, gracias por tu respuesta. Igualmente un abrazo y nos vemos!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".