none
Actualizar datos en formularios y DataSet RRS feed

  • Pregunta

  • Hola a tod@s,

       Estoy trabajando en un pequeño proyecto muy simple que cuenta con una pequeña BBDD en Access y varios formularios.

        En el formulario principal tenemos un DataSet que carga todos los consumibles de la BBDD. Desde este formulario, haciendo doble clic sobre un consumible, abrimos un segundo formulario “Detalle” que muestra en cajas de texto el detalle del consumible seleccionado pero solo en forma “lectura” (así se quiere). Desde el segundo formulario “Detalle” se quiere abrir un tercer formulario para editar el consumible seleccionado. Hasta aquí todo bien, el problema está a la hora de editar un consumible en el tercer formulario, que al hacerlo, éste no se actualiza en el formulario 2 “Detalle” y por lo tanto, tampoco en el formulario principal “En el DataSet”.

        Os paso el código que tengo al hacer doble clic en una celda del DataSet:

    Private Sub frmConsumibles_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

            Me.Validate()

            Me.ConsumiblesBindingSource.EndEdit()

            Me.TableAdapterManager.UpdateAll(Me.BBDDDataSet)

        End Sub

        Private Sub Consumibles_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

            'TODO: esta línea de código carga datos en la tabla 'BBDDDataSet.Consumibles' Puede moverla o quitarla según sea necesario.

            Me.ConsumiblesTableAdapter.Fill(Me.BBDDDataSet.Consumibles)

            Try

        Catch ex  As Exception

                MessageBox.Show(ex.Message)

            End Try

            alternarcolorfilas(ConsumiblesDataGridView)

        End Sub

        Private Sub DataGridView1_CellDoubleClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles ConsumiblesDataGridView.CellDoubleClick

            Dim row As DataGridViewRow = ConsumiblesDataGridView.CurrentRow

            Using frm As New fmrVerConsumible(row)

                frm.ShowDialog()

            End Using

        End Sub

    También os paso el código que tengo en el segundo formulario “Detalle”:

    Public Class fmrVerConsumible

        Inherits Form

        Private _idconsumible As Nullable(Of Integer) = Nothing

        Public Sub New()

            InitializeComponent()

        End Sub

        Public Sub New(ByVal idconsumible As Integer)

            Me.New()

            _idconsumible = idconsumible

        End Sub

        Private m_row As DataGridViewRow

        Public Sub New(ByVal row As DataGridViewRow)

            InitializeComponent()

            If (row Is Nothing) Then _

               Throw New ArgumentNullException()

            m_row = row

        End Sub

        Private Sub Form2_Load(ByVal sender As Object, _

           ByVal e As EventArgs) Handles Me.Load

            Dim value As Object = m_row.Cells(0).Value

            If (value IsNot DBNull.Value) Then

                txtId.Text = CStr(value)

            End If

            value = m_row.Cells(1).Value

            If (value IsNot DBNull.Value) Then

                txtCodigo.Text = CStr(value)

            End If

            value = m_row.Cells(2).Value

            If (value IsNot DBNull.Value) Then

                txtDescripción.Text = CStr(value)

            End If

            value = m_row.Cells(3).Value

            If (value IsNot DBNull.Value) Then

                txtNumeroEquipo.Text = CStr(value)

            End If

            value = m_row.Cells(4).Value

            If (value IsNot DBNull.Value) Then

                txtDepartamento.Text = CStr(value)

            End If

            value = m_row.Cells(5).Value

            If (value IsNot DBNull.Value) Then

                txtStock.Text = CStr(value)

            End If

        End Sub

        Private Sub btoOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btoOK.Click

            m_row.Cells(1).Value = txtCodigo.Text

            m_row.Cells(2).Value = txtDescripción.Text

            m_row.Cells(3).Value = txtNumeroEquipo.Text

            m_row.Cells(4).Value = txtDepartamento.Text

            m_row.Cells(5).Value = txtStock.Text

            DialogResult = DialogResult.OK

        End Sub

    Para abrir el tercer formulario, tengo creado un módulo llamado “entidades” con el siguiente código:

    Module Entidades

        Public txtId As String

        Public txtCodigo As String

        Public txtDescripción As String

        Public txtNumeroEquipo As String

        Public txtDepartamento As String

        Public txtStock As String

      

       End Module

        En el segundo formulario “Detalle” tengo un botón para abrir el tercer formulario con el siguiente código:

        Private Sub btoEditar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btoEditar.Click

            Entidades.txtId = txtId.Text

            Entidades.txtCodigo = txtCodigo.Text

            Entidades.txtDescripción = txtDescripción.Text

            Entidades.txtNumeroEquipo = txtNumeroEquipo.Text

            Entidades.txtDepartamento = txtDepartamento.Text

            Entidades.txtStock = txtStock.Text

            Dim edit As New frmEditarConsumible()

            edit.ShowDialog()

        End Sub

        En el evento “Load” del tercer formulario, tengo el siguiente código

        Private Sub Form3_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

            Me.txtIdEdit.Text = Entidades.txtId

            Me.txtCodigoEdit.Text = Entidades.txtCodigo

            Me.txtDescripciónEdit.Text = Entidades.txtDescripción

            Me.txtNumeroEquipoEdit.Text = Entidades.txtNumeroEquipo

            Me.txtDepartamentoEdit.Text = Entidades.txtDepartamento

            Me.txtStockEdit.Text = Entidades.txtStock

        End Sub

      

        ¿Me pueden ayudar?

    lunes, 28 de diciembre de 2015 12:13

Respuestas

  • Los cambios los tendrás que tratar en la linea siguiente al ShowDialog que llama al tercer formulario.

    Si los cambios del tercer formulario se graban en el dataset, bastará con actualizarlo y refrescar los valores de los textbox.
    Si los cambios del tercer formulario no se graban, tendrás que trabajar con propiedades en ese formulario para recuperar esos valores en el formulario2. En tu caso puedes actualizar "Entidades" y recuperar los nuevos valores.

    Al salir del formulario3 harás algo como

    Entidades.txtId = txtIdEdit.Text
    Entidades.txtCodigo = txtCodigoEdit.Text
    ...

    y en Formulario2 :
    ...
    edit.ShowDialog()

    txtId.Text = Entidades.txtId

    txtCodigo.Text = Entidades.txtCodigo
    ...



    Saludos, Javier J

    martes, 29 de diciembre de 2015 8:23

Todas las respuestas

  • Lo que tienes que hacer es volver a cargar el DataSet después de la linea

    .ShowDialog()


    Saludos, Javier J

    lunes, 28 de diciembre de 2015 12:58
  • Muchas gracias Javier por tu respuesta.

        Lo que me gustaría es que cuando realizo un cambio en el tercer formulario, dichos cambios pasen a los "textbox" del segundo y de éste al dataset del primero.

        Si los "textbox" que tengo en el segundo formulario los pongo como "lectura y escritura" y realizo una modificación, al cerrar el segundo formulario, los cambio si pasan al dataset del primer formulario.

    lunes, 28 de diciembre de 2015 14:23
  • Los cambios los tendrás que tratar en la linea siguiente al ShowDialog que llama al tercer formulario.

    Si los cambios del tercer formulario se graban en el dataset, bastará con actualizarlo y refrescar los valores de los textbox.
    Si los cambios del tercer formulario no se graban, tendrás que trabajar con propiedades en ese formulario para recuperar esos valores en el formulario2. En tu caso puedes actualizar "Entidades" y recuperar los nuevos valores.

    Al salir del formulario3 harás algo como

    Entidades.txtId = txtIdEdit.Text
    Entidades.txtCodigo = txtCodigoEdit.Text
    ...

    y en Formulario2 :
    ...
    edit.ShowDialog()

    txtId.Text = Entidades.txtId

    txtCodigo.Text = Entidades.txtCodigo
    ...



    Saludos, Javier J

    martes, 29 de diciembre de 2015 8:23
  • Muchísimas gracias Javier. Así ya me funciona. He adaptado tu fragmento de código a mi aplicación y funciona a las mil maravillas.

    De nuevo, muchas gracias.

    martes, 29 de diciembre de 2015 14:57