none
Actualizar datagridview desde otro formulario RRS feed

  • Pregunta

  • holas, mi pregunta es como puedo actualizar un datagridview que esta en el form1 desde el form2 (este lo abro desde el form1)?

    he buscado la solucion a esta pregunta pero no la encuentro, ya probe con un actualizador despues de abrir el form2 con el showdialog y no funciona,

    espero q puedan ayudarme....

    jueves, 6 de diciembre de 2012 19:29

Todas las respuestas

  • podrias aplicar lo que comento aqui

    [DataGridView] Parte 3 – Pasaje de información entre grilla distintos formularios

    como veras alli comunico grids de dos formularios usando interfaces para desacoplar la comunicacion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 6 de diciembre de 2012 20:18
  • Hola.

    Se a respondido en muchas ocasiones a esta pregunta en el foro.

    Actualizar DataGridView despues de insertar datos desde otro formulario

    Actualizar DataGridView

    Actualizar datagridview desde otro form

    Lo que tienes que hacer es detectar el cierre del form y actualizar el origen de datos.

    Saludos.


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    jueves, 6 de diciembre de 2012 21:18
  • Pero como que no entiendes, has hecho al menos el intento en el primer link que te puse justo se responde una pregunta similar a la tuya.

    Tienes que tener un función que te cargue los datos en un datatable.

    Public Function Cargar() As DataTable
            Using conn As New SqlConnection("Connection string")
                Dim dt As New DataTable()
                Dim query = "SELECT * FROM NombreTabla"
                Dim cmd As New SqlCommand(query, conn)
                Dim adap As New SqlDataAdapter(cmd)
                adap.Fill(dt)
                Return dt
            End Using
    End Function


    Esa función la usarías para llenar el datagridview entonces cuando abras el form2 arias.

    Dim frm As New Form2()
    frm.ShowDialog()
    
    DataGridView1.DataSource = Cargar()

    Como veras muestras el form2 ShowDialog() y luego que se cierre el form2 este actualizara los datos.

    Saludos.


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador


    jueves, 6 de diciembre de 2012 21:38
  • hice eso de detectar el cierre y actualizar pero nose por qué  el datagridview sigue sin actualizarse qué error podria estar cometiendo??
    jueves, 6 de diciembre de 2012 21:53
  • qué error podria estar cometiendo??

    Pues si no se actualiza lago estas haciendo mal si no pones el código que tienes no podríamos decirte que es lo que estas haciendo mal.

    Si seguiste los pasos que te indique arriba tendría que funcionarte.

    Saludos.


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    jueves, 6 de diciembre de 2012 22:04
  • el error que me sale es que al agregar un nuevo registro me actualiza la primera vez, la segunda vez que agrego no actualiza, la tercera si, la cuarta no......

    a que se debe esto??

    jueves, 6 de diciembre de 2012 22:17
  • Pero pon el código que tienes porque si no como te podremos decir cual es el problema.

    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    jueves, 6 de diciembre de 2012 22:22
  • ESTE ES EL CODIGO DEL FORM PRINCIPAL

    Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click Dim frmEditar As New AgregarMaterial() AddHandler frmEditar.FormClosing, New FormClosingEventHandler(AddressOf frmEditar_FormClosing) frmEditar.Show() End Sub

    Private Sub frmEditar_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
            Dim frmEdit As AgregarMaterial = TryCast(sender, AgregarMaterial)
            If frmEdit.DialogResult = DialogResult.OK Then
                Actualizador()
            End If
    
        End Sub
    Public Sub Actualizador()
            Dim consulta As String = "select * from Stock"
            Dim dtc As DataTable
            dtc = New DataTable
            da = New OleDbDataAdapter(consulta, con)
            da.Fill(dtc)
            Me.DataGridView1.DataSource = dtc
        End Sub


    ESTE ES EL BOTON ACEPTAR DEL FORM AGREGAR MATERIAL 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim consulta As String = "Insert into Stock values('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "' )"
            dt = New DataTable
            da = New OleDbDataAdapter(consulta, con)
            da.Fill(dt)
            MsgBox("Se ha agregado el registro")
            Me.DialogResult = DialogResult.OK
            Me.Close()
        End Sub

    NO INCLUI LA CONEXION POR QUE CONSIDERO QUE NO ES NECESARIO...

    BUENO Y COMO LES DIJE  SE ACTUALIZA UNA VEZ, DESPUES NO, DESPUES SI, LUEGO NO  Y ASI SUCESIVAMENTE

    jueves, 6 de diciembre de 2012 22:40
  • En el evento FormClosing llama solo el método Actualizador() lo demás quitalo.

    Private Sub frmEditar_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
           Actualizador()
    End Sub
        

    Cambia eso y comentas como te fue.

    Saludos.


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    jueves, 6 de diciembre de 2012 23:00
  • puse solo el actualizador y sigue igual

    jueves, 6 de diciembre de 2012 23:13
  • Revisando el codigo veo que el codigo del insert lo tienes mal remplanzalo por el siguiente.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim consulta As String = "Insert into Stock(campo1, campo2, campo3, campo4)  values(@param1, @param2, @param3, @param4)"
    	Dim cmd As New SqlCommand(consulta, con)
    	cmd.Parameters.AddWithValue("@param1", TextBox1.Text)
    	cmd.Parameters.AddWithValue("@param2", TextBox2.Text)
    	cmd.Parameters.AddWithValue("@param3", TextBox3.Text)
    	cmd.Parameters.AddWithValue("@param4", TextBox4.Text)
    	con.Open()
    	Dim rowsAffected As Integer = cmd.ExecuteNonQuery()
    	If rowsAffected > 0 Then
         	      MsgBox("Se ha agregado el registro")
    	Else
         	      MsgBox("No se agrego el registro")
    	End If
    	Me.Close()
    End Sub 

    En la consulta donde dice campo1, campo2... pondras los nombres de los campos de la tabla.

    Saludos.


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador


    jueves, 6 de diciembre de 2012 23:24
  • Sabes estoy trabajando con access 2007 y no me sale ningun error en el codigo simplemente no actualiza el datagridview, o mejor dicho aveces actualiza y aveces no
    jueves, 6 de diciembre de 2012 23:26
  • Es raro que te funcione es codigo que tienes del insert si es en acces tendria que ser.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            
    	Dim consulta As String = "Insert into Stock(campo1, campo2, campo3, campo4)  values(@param1, @param2, @param3, @param4)"
    	Dim cmd As New OleDbCommand(consulta, con)
    	cmd.Parameters.AddWithValue("@param1", TextBox1.Text)
    	cmd.Parameters.AddWithValue("@param2", TextBox2.Text)
    	cmd.Parameters.AddWithValue("@param3", TextBox3.Text)
    	cmd.Parameters.AddWithValue("@param4", TextBox4.Text)
    	con.Open()
    	Dim rowsAffected As Integer = cmd.ExecuteNonQuery()
    	If rowsAffected > 0 Then
         		MsgBox("Se ha agregado el registro")
    	Else
         		MsgBox("No se agrego el registro")
    	End If
    	Me.Close()
    End Sub   

    Ahora si tu dices que esta bien y el unico problema es que no actualiza el datagrid el codigo que tienes esta bien el problema lo veia en lo del insert.

    Pero si no entonces prueba abriendo el form2 con ShowDialog().

    Solo arias para abrir el form que hace el insert.

    Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click
       Dim frm As New AgregarMaterial()      
       frm.ShowDialog()
    
       DataGridView1.DataSource = Actualizador()
           
    End Sub

    Ya no necesitarias el evento Formclosign solo arias eso y listo.

    Saludos.


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    jueves, 6 de diciembre de 2012 23:45
  • Ocurre exactamente lo mismo con el showDialog

    jueves, 6 de diciembre de 2012 23:57
  • Ocurre exactamente lo mismo con el showDialog()

    Entonces el problema como te lo mencione serie problema con la query del insert cambiaste ese código el del insert?


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    viernes, 7 de diciembre de 2012 2:10
  • Lo probe tambien y nada...
    domingo, 9 de diciembre de 2012 20:57