VB.NET Update DataGridView from another Form

2
    Public Class FrmMenu

        Private _modelUsuario As New Usuario.Usuario
        Private _controllerUsuario As New ControllerUsuario.ControllerUsuario

        Private _msjAlert As String

        Public Sub New()

            ' This call is required by the designer.
            InitializeComponent()

            ' Add any initialization after the InitializeComponent() call.

        End Sub

        Public Property DaGrViUsuariosProp()
            Get
                Return DaGrViUsuarios.DataSource
            End Get
            Set(ByVal value)
                DaGrViUsuarios.DataSource = value
            End Set
        End Property

        Private Sub FrmMenu_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            DaGrViUsuarios.DataSource = _controllerUsuario.RouteGetUsuario(_msjAlert)
        End Sub

        Private Sub BtnAgregarUsuario_Click(sender As Object, e As EventArgs) Handles BtnAgregarUsuario.Click
            Dim _frmUsuario As New FrmUsuario
            _frmUsuario.Show()
        End Sub

        Private Sub DaGrViUsuarios_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DaGrViUsuarios.CellDoubleClick
            If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then
                Dim _frmUsuario As New FrmUsuario
                _frmUsuario.TextUsuarioProp = DaGrViUsuarios.CurrentRow.Cells(1).Value.ToString
                _frmUsuario.TextNombresProp = DaGrViUsuarios.CurrentRow.Cells(2).Value.ToString
                _frmUsuario.TextEmailProp = DaGrViUsuarios.CurrentRow.Cells(3).Value.ToString
                _frmUsuario.TextPasswdProp = DaGrViUsuarios.CurrentRow.Cells(4).Value.ToString
                _frmUsuario.CmbPerfilProp = DaGrViUsuarios.CurrentRow.Cells(5).Value.ToString
                _frmUsuario.Show()
            End If
        End Sub

        Private Sub BtnRefrescar_Click(sender As Object, e As EventArgs) Handles BtnRefrescar.Click
            DaGrViUsuarios.DataSource = _controllerUsuario.RouteGetUsuario(_msjAlert)
        End Sub
    End Class

    Public Class FrmUsuario

    Private _modelUsuario As New Usuario.Usuario
    Private _controllerUsuario As New ControllerUsuario.ControllerUsuario
    Private _mejAlert As String

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

    End Sub

    Public Property TextUsuarioProp()
        Get
            Return TextUsuario.Text
        End Get
        Set(ByVal value)
            TextUsuario.Text = value
        End Set
    End Property

    Public Property TextNombresProp()
        Get
            Return TextNombres.Text
        End Get
        Set(ByVal value)
            TextNombres.Text = value
        End Set
    End Property

    Public Property TextEmailProp()
        Get
            Return TextEmail.Text
        End Get
        Set(ByVal value)
            TextEmail.Text = value
        End Set
    End Property

    Public Property TextPasswdProp()
        Get
            Return TextPasswd.Text
        End Get
        Set(ByVal value)
            TextPasswd.Text = value
        End Set
    End Property

    Public Property CmbPerfilProp()
        Get
            Return CmbPerfil.Text
        End Get
        Set(ByVal value)
            CmbPerfil.Text = value
        End Set
    End Property

    Public Sub CargarCampos()
        _modelUsuario.Usuario = TextUsuario.Text
        _modelUsuario.Nombres = TextNombres.Text
        _modelUsuario.Email = TextEmail.Text
        _modelUsuario.Passwd = TextPasswd.Text
        _modelUsuario.Perfil = CmbPerfil.Text
    End Sub

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

    End Sub

    Private Sub BtnEnviarFormUsuario_Click(sender As Object, e As EventArgs) Handles BtnEnviarFormUsuario.Click
        CargarCampos()
        If _controllerUsuario.Validacion(_modelUsuario, _mejAlert) Then
            _modelUsuario = _controllerUsuario.RouteAddUsuario(TextUsuario.Text, TextNombres.Text, TextEmail.Text, TextPasswd.Text, CmbPerfil.Text)
            MessageBox.Show("Usuario Guardado Exitosamente!.", "Success!")
            Dim _frmMenu As New FrmMenu
            _frmMenu.DaGrViUsuariosProp = _controllerUsuario.RouteGetUsuario(_mejAlert) ' en esta linea deberia actualizar pero no lo hace
            Hide()
        Else
            MessageBox.Show(_mejAlert, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
        End If
    End Sub
End Class

The problem is that when calling the public property DaGrViUsuariosProp in the second form FrmUser the datagridview is not updated. The truth does not know what could be happening

    
asked by Christian Gimenez 20.05.2016 в 03:03
source

1 answer

0

The problem is that you are creating a new instance of the form when you should use the existing one

 Public Class FrmUsuario


    Private _frmMenu As FrmMenu

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

    End Sub

    Public Sub New(frmMenu As FrmMenu)

        Me.New()

        _frmMenu = frmMenu

    End Sub

    'resto codigo


    Private Sub BtnEnviarFormUsuario_Click(sender As Object, e As EventArgs) Handles BtnEnviarFormUsuario.Click
        CargarCampos()
        If _controllerUsuario.Validacion(_modelUsuario, _mejAlert) Then
            _modelUsuario = _controllerUsuario.RouteAddUsuario(TextUsuario.Text, TextNombres.Text, TextEmail.Text, TextPasswd.Text, CmbPerfil.Text)
            MessageBox.Show("Usuario Guardado Exitosamente!.", "Success!")

            _frmMenu.DaGrViUsuariosProp = _controllerUsuario.RouteGetUsuario(_mejAlert) 

            Hide()
        Else
            MessageBox.Show(_mejAlert, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
        End If
    End Sub
End Class

As you'll see, it passes the form in the constructor and you use that instance to access the grid

Public Class FrmMenu

   'resto codigo

    Private Sub BtnAgregarUsuario_Click(sender As Object, e As EventArgs) Handles BtnAgregarUsuario.Click
         Dim _frmUsuario As New FrmUsuario(Me)
        _frmUsuario.Show()
    End Sub

End Class

when you instantiate the form you pass Me or be the instance of the form itself

    
answered by 20.05.2016 / 04:16
source