none
ACTUALIZAR UN DATAGRIDVIEW ENLAZADo A DATOS RRS feed

  • Pregunta

  • Muy buen tardes

    Llevo más de 5 días intentando que mi datagridview se me actualice, pero no lo he podido lograr.

    La situación es la siguiente:

    Tengo un form que llame frmVentas, dentro de los objetos que contiene el frm hay un botón que en su propiedad Text tiene AGREGAR y tiene como objetivo principal hacer un registro de las ventas, para ello inserte un datagridview, la cual enlace a una base de datos.

    El problema radica en que al darle clic sobre el botón agregar, la información no me aparece de manera inmediata en el datagridview, para ver los registros recientes, debo cerrar COMPLETAMENTE la aplicación y volverla a iniciar.

    Este es el código del botón btnagregar:

    NOTA: Estoy programando en Microsoft Visual Basic 2010 Express con base de datos en  sqlServer.

    Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click

            Dim dbConnection As New SqlConnection(cnString)

            Dim sqlInsert As String = "INSERT INTO ventas (nroventa, id, cantidad, preciounitario, subtotal,fecha) "

            Dim sqlValores As String = "VALUES('" & CSng(lblVenta.Text) & "', '" & CSng(lblDesc.Tag) & "', '" & CSng(txtCantidad.Text) & "', '" & CSng(lblImporte.Text) & "', '" & CSng(lblSubt.Text) & "',' " & lblfecha.Text & "')"

            Dim cmd As New SqlCommand(sqlInsert + sqlValores, dbConnection)

            dbConnection.Open()

            Me.VentasTableAdapter.Fill(Me.DrugstoreDataSet1.Ventas)

            Me.TableAdapterManager.VentasTableAdapter.Adapter.ContinueUpdateOnError = True

            If DrugstoreDataSet1.HasChanges Then

                Dim DT As DrugstoreDataSet1.VentasDataTable = DrugstoreDataSet1.Ventas.GetChanges

                If DT IsNot Nothing Then

                    Try

                        VentasTableAdapter.Update(DT)

                    Catch ex As Exception

                        MsgBox(ex.Message)

                        Exit Sub

                    End Try

                    MsgBox(DT.Rows.Count.ToString & " rows updated successfully.")

                End If

            End If

            Me.Validate()

            Me.VentasBindingSource.EndEdit()

            Me.TableAdapterManager.UpdateAll(Me.DrugstoreDataSet1)

            If DrugstoreDataSet1.HasChanges Then

                Dim reply As MsgBoxResult =

                    MsgBox("The DataSet contains changes." &

                           vbCrLf & "Reload data anyway?",

                                                   MsgBoxStyle.YesNo Or MsgBoxStyle.Exclamation)

                If reply = MsgBoxResult.No Then Exit Sub

                Me.VentasTableAdapter.Fill(Me.DrugstoreDataSet1.Ventas)

            End If

            cmd.ExecuteNonQuery()

            Me.Vw_ventasTableAdapter.Fill(Me.DrugstoreDataSet1.vw_ventas)

            Me.VwventasBindingSource.Filter = "nroventa = " & CSng(lblVenta.Text)

            dbConnection.Close()

            lblDesc.Text = "Descripción del producto"

            lblStk.Text = "Stock actual"

            lblImporte.Text = "Importe unitario"

            txtCantidad.Text = ""

            lblSubt.Text = "Subtotal"

            calculoTotal()

        End Sub

    ¿Alguien sabe cómo puede hacer que se actualice inmediatamente?

    Muchas gracias

    Quedo <g class="gr_ gr_49 gr-alert gr_spell gr_inline_cards gr_disable_anim_appear ContextualSpelling" data-gr-id="49" id="49">atento</g>.

    sábado, 7 de octubre de 2017 20:42

Respuestas

  • Fíjate en el Ventas_Load. Ahí tienes metidas varias llamadas al Fill de los TableAdapters. Eso es lo que hace que se llenen de datos. Copia la línea correspondiente al tableadapter cuyos datos quieres que se actualicen y pégala en donde haces el Insert (después de haber enviado el Insert a la base de datos).
    lunes, 9 de octubre de 2017 6:44

Todas las respuestas

  • Pero... ¿qué DataGridView? En todo ese código no se ve que hagas nada por ningún sitio con ningún DataGridView. ¿Por qué supones que un DatagridView debería actualizarse al ejecutar eso, si en todo ese código no le asignas nada a ningún DataGridView?
    sábado, 7 de octubre de 2017 21:01
  • Mira, al datagridview la enlace a la tabla ventas; en el código  (ver codigo abajo) inserto los valores procedente de lablel y texbox  a la tabla ventas, los valores me insertan pero solo los puedo visualizar cerrando y abriendo la aplicacion, entonces quiero que al dar clic se actualice inmediatamente sin tener que cerrar.

     Dim sqlInsert As String = "INSERT INTO ventas (nroventa, id, cantidad, preciounitario, subtotal,fecha) "

            Dim sqlValores As String = "VALUES('" & CSng(lblVenta.Text) & "', '" & CSng(lblDesc.Tag) & "', '" & CSng(txtCantidad.Text) & "', '" & CSng(lblImporte.Text) & "', '" & CSng(lblSubt.Text) & "',' " & lblfecha.Text & "')"

    sábado, 7 de octubre de 2017 21:14
  • Hola Es-ti-ven

    No, lo que esperas no será mientras no vuelvas a invocarlos después de insertar tus datos. Me explico, al momento de presionar el botón "Agregar", esta ejecución inserta los datos e inmediatamente después debes listarlos, ya que no será de forma automática.

    Por ejemplo:

    - Lleno mi datagridview con los datos que existen en la base de datos

    - Inserto los datos

    - Recargo mi datagridview con los datos (lo mismo del primer paso)

    En pocas palabras, al final del código de tu botón, deberás llamar al método con el cual llenaste el objeto Datagridview.

    Saludos


    Brayan De la Cruz
    Lima - Perú


    sábado, 7 de octubre de 2017 22:06
  • Hola

    podria por favor explicarme directamente en el codigo, es que soy novato y no entendi muy bien que hacer

    sábado, 7 de octubre de 2017 22:14
  • ¿Cómo llenas el datagridview? ¿cómo lo invocas? de la misma forma que lo invocas para llenarlo por primera vez, deberás hacerlo después de que insertes los datos. No te puedo dar un código exacto, porque no se como lo manejas. Por ejemplo, te diría colócalo aquí:

     lblSubt.Text = "Subtotal"
            calculoTotal()
    'Aquít termina tu inserción, ahora llama al método que lo llena
    'Aquí llamar el método-------
        End Sub

    échale un ojo al enlace de documentación oficial:

    Cómo: Enlazar datos al control DataGridView de formularios Windows Forms

    Saludos


    Brayan De la Cruz
    Lima - Perú

    sábado, 7 de octubre de 2017 22:27
  • Para llenar el datagridview utilizo solo este codigo

    Dim sqlInsert As String = "INSERT INTO ventas (nroventa, id, cantidad, preciounitario, subtotal,fecha) "

            Dim sqlValores As String = "VALUES('" & CSng(lblVenta.Text) & "', '" & CSng(lblDesc.Tag) & "', '" & CSng(txtCantidad.Text) & "', '" & CSng(lblImporte.Text) & "', '" & CSng(lblSubt.Text) & "',' " & lblfecha.Text & "')"

    porque el datagridview esta enlazado a una tabla llamada "ventas" , entonces  no se como llamaria el metodo, y cunado hablas de metodo ¿¿A que te refieres?

    sábado, 7 de octubre de 2017 22:39
  • No, no estás llenando el datagridview con ello, tu estás insertando datos a tu Adapter y de dicho adapter es donde debes mostrar nuevamente en el datagridview

    Te fijaste el enlace que te envié?


    Brayan De la Cruz
    Lima - Perú


    sábado, 7 de octubre de 2017 23:14
  • Hola, por lo visto has utilizado un gestro de base de datos para obtener el DataGridView, si no me equivoco sería vwentasDataGrieView? donde la base de datos sería Drugstore? si es así la fomra de updapear sería algo como esto

                Me.VentasTableAdapter.Update(Me.DrugstoreDataSet1.Ventas)
                Me.VentasTableAdapter.Fill(Me.DrugstoreDataSet1.Ventas)

    Como DGV está tomado enlazado al dataset1 debería tomar los cambiosPor otro lado tú, ejecutas un fill mediante   "Me.Vw_ventasTableAdapter.Fill(Me.DrugstoreDataSet1.vw_ventas)" No estas utilizando otro adaptador y otra tabla? eso no lo entiendo

    sábado, 7 de octubre de 2017 23:15
  • Bueno entonces como hago para que mi adapter me actualice los datos en el datagirdvew, pido disculpas si pregunto cosas obvias es solo que apenas me estoy sumergiendo en este mundo de la programación y algunas cosas no las tengo muy claras 
    domingo, 8 de octubre de 2017 0:18
  • Hola, realmente estoy utilizando dos datagridvew en mi proyecto, uno esta enlazado a una vista vwventa y uno que es el que esta enlazado a la tabla de ventas. El datagridvew de la vista tiene como objetivo mostrar los producto que estoy agregando antes de grabar la venta, pero esta vista se alimenta de la tabla ventas, entonces si el datagridnew no se actualiza la vista no se me actualiza entonces lo que quiero es que la tabla ventas se me alimente para que por medio del filtro se me carguen los datos a la vistatab
    domingo, 8 de octubre de 2017 0:23
  • Una vez echo los cambios debes volver a cargar Wv_ventasTableAdapter ya que nunca lo actualizas, no se si tienes el procedimiento correcto deberías colocar el código completo más una captura de tu escenario como para entender mejor. A priori lo que haces es volver a cargar el DGV (el que esta con Wv_) con los mismos datos que tenía, debes en definitiva actualizar ese adapter.

    Saludos

    domingo, 8 de octubre de 2017 2:00
  • Buenos dias Marcelo PF

    Me podrias indicar cual es el codigo para actualizar ese datagridvew?

    Gracias

    domingo, 8 de octubre de 2017 14:31
  • El proyecto que estoy haciendo lo reproduzco de un ejercicio que sale en el libro  "VISUAL BASIC guia definitiva del programador" por Fernando Omar Luna

    Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click

            Dim dbConnection As New SqlConnection(cnString)

            Dim sqlInsert As String = "INSERT INTO ventas (nroventa, id, cantidad, preciounitario, subtotal,fecha) "

            Dim sqlValores As String = "VALUES('" & CSng(lblVenta.Text) & "', '" & CSng(lblDesc.Tag) & "', '" & CSng(txtCantidad.Text) & "', '" & CSng(lblImporte.Text) & "', '" & CSng(lblSubt.Text) & "',' " & lblfecha.Text & "')"

            Dim cmd As New SqlCommand(sqlInsert + sqlValores, dbConnection)

            dbConnection.Open()

            cmd.ExecuteNonQuery()

            Me.Vw_ventasTableAdapter.Fill(Me.DrugstoreDataSet1.vw_ventas)

            Me.VwventasBindingSource.Filter = "nroventa = " & CSng(lblVenta.Text)

            dbConnection.Close()

            lblDesc.Text = "Descripción del producto"

            lblStk.Text = "Stock actual"

            lblImporte.Text = "Importe unitario"

            txtCantidad.Text = ""

            lblSubt.Text = "Subtotal"

            calculoTotal()

        End Sub


    domingo, 8 de octubre de 2017 14:38
  • No me has respondido si utlilizas un gestor de base de dato pero supongo que si, revisa tu códgio y los pasos del gestor, ya que ambos DGV deben tener el mismo DataSet de origen, dando Update con Ventas y luego fill(wv_ventas) se deberían actualizar ambos, vuelve por tus pasos y verifica, en algún lado se omitió un paso, insisto que coloques todo el código completo ya que tendras una mejor respuesta, ej: supongo que "snString" está declarado a nivel formulario, pero no lo se.

    Saludos

    domingo, 8 de octubre de 2017 23:35
  • Saludos realmente no entiendo a que te refieres, este es el código completo que utilizo en el frmVentas

    Imports System.Data.Sql

    Imports System.Data.SqlClient

    Imports Drugstore.drogstore

    Public Class frmVentas

        Dim cnString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\data bases\Drugstore\Drugstore\drugstore.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

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

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

            Me.VentasTableAdapter.Fill(Me.DrugstoreDataSet1.Ventas)

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

            Me.ProductosTableAdapter.Fill(Me.DrugstoreDataSet1.Productos)

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

            Me.Vw_ventasTableAdapter.Fill(Me.DrugstoreDataSet1.vw_ventas)

            Me.VwventasBindingSource.Filter = "nroventa = 0"

            btnCancelar.Enabled = False

            btnGrabar.Enabled = False

            lblfecha.Text = DateTime.Now.ToString("dd/MM/yyyy")

        End Sub

        Function graboNuevoNro() As Boolean

            Dim con As New SqlConnection(cnString)

            Dim sqlQ As String = "UPDATE numeracion SET numticket = (numticket + 1)"

            Dim cmd As New SqlCommand(sqlQ, con)

            graboNuevoNro = False

            con.Open()

            cmd.ExecuteNonQuery()

            graboNuevoNro = True

        End Function

        Sub cambioBotones()

            btnNuevaVenta.Enabled = Not btnNuevaVenta.Enabled

            btnCancelar.Enabled = True

            btnGrabar.Enabled = True

        End Sub

        Function traigoUltimoNro() As String

            Dim dbConnection As New SqlConnection(cnString)

            Dim sqlQ As String = "SELECT numticket FROM numeracion"

            Dim Reader As SqlDataReader

            Dim cmd As New SqlCommand(sqlQ, dbConnection)

            traigoUltimoNro = -1

            dbConnection.Open()

            cmd.Connection = dbConnection

            cmd.CommandText = sqlQ

            Reader = cmd.ExecuteReader

            Reader.Read()

            traigoUltimoNro = FormatNumber(Reader.Item(0).ToString, 2) + 1

            Reader.Close()

        End Function

        Private Sub btnNuevaVenta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevaVenta.Click

            lblVenta.Text = traigoUltimoNro()

            txtSelecciono.Focus()

            cambioBotones()

        End Sub

        Private Sub txtSelecciono_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSelecciono.TextChanged

            If Trim(txtSelecciono.Text) = "" Then

                Me.ProductosBindingSource.RemoveFilter()

                Me.gridProd.Visible = False

            Else

                Me.ProductosBindingSource.Filter = "descripcion LIKE '*" & Trim(txtSelecciono.Text) & "%'"

                Me.gridProd.Visible = True

                Me.gridProd.Width = 608

            End If

        End Sub

        Private Sub btnSelecciona_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelecciona.Click

            With gridProd

                If gridProd.Rows.Count = 0 Then Exit Sub

                lblDesc.Tag = .CurrentRow.Cells(0).Value

                lblDesc.Text = .CurrentRow.Cells(1).Value

                lblStk.Text = Format(.CurrentRow.Cells(2).Value, 2)

                lblImporte.Text = Format(.CurrentRow.Cells(3).Value, "c")

            End With

            txtSelecciono.Text = ""

            txtCantidad.Focus()

        End Sub

        Private Sub txtCantidad_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCantidad.TextChanged

            If Trim(txtCantidad.Text) = " " Then lblSubt.Text = 0 : Exit Sub

            If IsNumeric(Trim(txtCantidad.Text)) Then

                lblSubt.Text = Format(CSng(txtCantidad.Text) * CSng(lblImporte.Text), "c")

            End If

        End Sub

        Sub calculoTotal()

            Dim cn As New SqlConnection(cnString)

            Dim sqlQ As String = "SELECT sum(subtotal) AS Total FROM ventas WHERE nroventa = " & CSng(lblVenta.Text)

            Dim cmd As New SqlCommand(sqlQ, cn)

            Dim Reader As SqlDataReader

            cn.Open()

            cmd.Connection = cn

            cmd.CommandText = sqlQ

            Reader = cmd.ExecuteReader

            Reader.Read()

            Dim d As Double = CDbl(Reader.Item(0))

            lblTotal.Text = Format(d, "c")

            Reader.Close()

        End Sub

        Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click

            Dim dbConnection As New SqlConnection(cnString)

            Dim sqlInsert As String = "INSERT INTO ventas (nroventa, id, cantidad, preciounitario, subtotal,fecha) "

            Dim sqlValores As String = "VALUES('" & CSng(lblVenta.Text) & "', '" & CSng(lblDesc.Tag) & "', '" & CSng(txtCantidad.Text) & "', '" & CSng(lblImporte.Text) & "', '" & CSng(lblSubt.Text) & "',' " & lblfecha.Text & "')"

            Dim cmd As New SqlCommand(sqlInsert + sqlValores, dbConnection)

            dbConnection.Open()

            cmd.ExecuteNonQuery()

            Dim conn = New SqlConnection(cnString)

            Dim da = New SqlDataAdapter("Select * from ventas", conn)

            Dim cmde = New SqlCommandBuilder(da)

            da.UpdateCommand = cmde.GetUpdateCommand

            da.Fill(DrugstoreDataSet1, "ventas")

            da.Update(DrugstoreDataSet1, "ventas")

            Me.Validate()

            Me.VentasBindingSource.EndEdit()

            Dim deletedOrders As DrugstoreDataSet1.VentasDataTable = CType(

                DrugstoreDataSet1.Ventas.GetChanges(Data.DataRowState.Deleted), DrugstoreDataSet1.VentasDataTable)

            Dim newOrders As DrugstoreDataSet1.VentasDataTable = CType(

               DrugstoreDataSet1.Ventas.GetChanges(Data.DataRowState.Added), DrugstoreDataSet1.VentasDataTable)

            Dim modifiedOrders As DrugstoreDataSet1.VentasDataTable = CType(

              DrugstoreDataSet1.Ventas.GetChanges(Data.DataRowState.Modified), DrugstoreDataSet1.VentasDataTable)

            consultar(VentasDataGridView)

            cnString

            Me.VwventasBindingSource.Filter = "nroventa = " & CSng(lblVenta.Text)

            lblDesc.Text = "Descripción del producto"

            lblStk.Text = "Stock actual"

            lblImporte.Text = "Importe unitario"

            txtCantidad.Text = ""

            lblSubt.Text = "Subtotal"

            calculoTotal()

            Return

        End Sub

        Private Sub TablaVentasToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TablaVentasToolStripMenuItem.Click

            Tablaventas.Show()

        End Sub

        Private Function run() As Object

            Throw New NotImplementedException

        End Function

        Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click

            With VentasDataGridView

                .DataSource = VentasBindingSource

                .Refresh()

            End With

        End Sub

        Sub consultar(ByVal tabla As DataGridView)

            Dim adaptador = New SqlDataAdapter("select* from ventas", cnString)

            Dim dataS As New DataSet

            adaptador.Fill(dataS, "ventas")

            tabla.DataSource = dataS.Tables("ventas")

        End Sub

    End Class

    lunes, 9 de octubre de 2017 0:16
  • Muy buenas noches compañero del foro.

    Desde hace varios días llevo intento resolver este problema, pero no he podido.

    El proyecto que estoy realizando lo saque del libro “Visual Basic guía definitiva del programador, por Omar Luna” todo iba bien hasta que llegue al frmVentas,

    Este es el formulario:

    La idea es que cuando se le de clic al botón agregar, los datos de la venta se envíen a la tabla Ventas que pertenece a la base de datos Drugstore.mdf, para que luego en el código desde ese mismo botón, se filtren los registro que tengan el mismo numero de venta para luego mostrármelos en el datagridview; este datagridvew tiene enlazado uno vista, la cual tiene relacionada las tablas ventas y productos.

    El problema radica en que los datos se actualizan solo cuando cierro y vuelvo a ejecutar el programa, entonces al agregar otro registro con el mismo número de factura de la venta anterior (solo la deja con el mismo número de la venta anterior por motivos de diseño), me filtra los registros de la venta anterior y no la actual, después de manipular mucho el código, no he podido encontrar la solución.

    Necesito lograr que los datos se me actualicen de manera inmediata a la tabla para que el filtro sea correcto.

    Si alguien sabe cómo resolverlo sería de mucha ayuda.

    Muchas gracias y quedo atento.

    NOTA: estoy programando en Microsoft Visual Basic 2010 Express, con base de datos en SQL, Adjunto el código completo del formulario frmVentas. (el que se ve en la imagen)Imports System.Data.Sql

    Imports System.Data.SqlClient

    Imports Drugstore.drogstore

    Public Class frmVentas

        Dim cnString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\data bases\Drugstore\Drugstore\drugstore.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

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

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

            Me.VentasTableAdapter.Fill(Me.DrugstoreDataSet1.Ventas)

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

            Me.ProductosTableAdapter.Fill(Me.DrugstoreDataSet1.Productos)

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

            Me.Vw_ventasTableAdapter.Fill(Me.DrugstoreDataSet1.vw_ventas)

            Me.VwventasBindingSource.Filter = "nroventa = 0"

            btnCancelar.Enabled = False

            btnGrabar.Enabled = False

            lblfecha.Text = DateTime.Now.ToString("dd/MM/yyyy")

        End Sub

        Function graboNuevoNro() As Boolean

            Dim con As New SqlConnection(cnString)

            Dim sqlQ As String = "UPDATE numeracion SET numticket = (numticket + 1)"

            Dim cmd As New SqlCommand(sqlQ, con)

            graboNuevoNro = False

            con.Open()

            cmd.ExecuteNonQuery()

            graboNuevoNro = True

        End Function

        Sub cambioBotones()

            btnNuevaVenta.Enabled = Not btnNuevaVenta.Enabled

            btnCancelar.Enabled = True

            btnGrabar.Enabled = True

        End Sub

        Function traigoUltimoNro() As String

            Dim dbConnection As New SqlConnection(cnString)

            Dim sqlQ As String = "SELECT numticket FROM numeracion"

            Dim Reader As SqlDataReader

            Dim cmd As New SqlCommand(sqlQ, dbConnection)

            traigoUltimoNro = -1

            dbConnection.Open()

            cmd.Connection = dbConnection

            cmd.CommandText = sqlQ

            Reader = cmd.ExecuteReader

            Reader.Read()

            traigoUltimoNro = FormatNumber(Reader.Item(0).ToString, 2) + 1

            Reader.Close()

        End Function

        Private Sub btnNuevaVenta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevaVenta.Click

            lblVenta.Text = traigoUltimoNro()

            txtSelecciono.Focus()

            cambioBotones()

        End Sub

        Private Sub txtSelecciono_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSelecciono.TextChanged

            If Trim(txtSelecciono.Text) = "" Then

                Me.ProductosBindingSource.RemoveFilter()

                Me.gridProd.Visible = False

            Else

                Me.ProductosBindingSource.Filter = "descripcion LIKE '*" & Trim(txtSelecciono.Text) & "%'"

                Me.gridProd.Visible = True

                Me.gridProd.Width = 608

            End If

        End Sub

        Private Sub btnSelecciona_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelecciona.Click

            With gridProd

                If gridProd.Rows.Count = 0 Then Exit Sub

                lblDesc.Tag = .CurrentRow.Cells(0).Value

                lblDesc.Text = .CurrentRow.Cells(1).Value

                lblStk.Text = Format(.CurrentRow.Cells(2).Value, 2)

                lblImporte.Text = Format(.CurrentRow.Cells(3).Value, "c")

            End With

            txtSelecciono.Text = ""

            txtCantidad.Focus()

        End Sub

        Private Sub txtCantidad_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCantidad.TextChanged

            If Trim(txtCantidad.Text) = " " Then lblSubt.Text = 0 : Exit Sub

            If IsNumeric(Trim(txtCantidad.Text)) Then

                lblSubt.Text = Format(CSng(txtCantidad.Text) * CSng(lblImporte.Text), "c")

            End If

        End Sub

        Sub calculoTotal()

            Dim cn As New SqlConnection(cnString)

            Dim sqlQ As String = "SELECT sum(subtotal) AS Total FROM ventas WHERE nroventa = " & CSng(lblVenta.Text)

            Dim cmd As New SqlCommand(sqlQ, cn)

            Dim Reader As SqlDataReader

            cn.Open()

            cmd.Connection = cn

            cmd.CommandText = sqlQ

            Reader = cmd.ExecuteReader

            Reader.Read()

            Dim d As Double = CDbl(Reader.Item(0))

            lblTotal.Text = Format(d, "c")

            Reader.Close()

        End Sub

        Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click

            Dim dbConnection As New SqlConnection(cnString)

            Dim sqlInsert As String = "INSERT INTO ventas (nroventa, id, cantidad, preciounitario, subtotal,fecha) "

            Dim sqlValores As String = "VALUES('" & CSng(lblVenta.Text) & "', '" & CSng(lblDesc.Tag) & "', '" & CSng(txtCantidad.Text) & "', '" & CSng(lblImporte.Text) & "', '" & CSng(lblSubt.Text) & "',' " & lblfecha.Text & "')"

            Dim cmd As New SqlCommand(sqlInsert + sqlValores, dbConnection)

            dbConnection.Open()

            cmd.ExecuteNonQuery()

            Dim conn = New SqlConnection(cnString)

            Dim da = New SqlDataAdapter("Select * from ventas", conn)

            Dim cmde = New SqlCommandBuilder(da)

            da.UpdateCommand = cmde.GetUpdateCommand

            da.Fill(DrugstoreDataSet1, "ventas")

            da.Update(DrugstoreDataSet1, "ventas")

            Me.Validate()

            Me.VentasBindingSource.EndEdit()

            Dim deletedOrders As DrugstoreDataSet1.VentasDataTable = CType(

                DrugstoreDataSet1.Ventas.GetChanges(Data.DataRowState.Deleted), DrugstoreDataSet1.VentasDataTable)

            Dim newOrders As DrugstoreDataSet1.VentasDataTable = CType(

               DrugstoreDataSet1.Ventas.GetChanges(Data.DataRowState.Added), DrugstoreDataSet1.VentasDataTable)

            Dim modifiedOrders As DrugstoreDataSet1.VentasDataTable = CType(

              DrugstoreDataSet1.Ventas.GetChanges(Data.DataRowState.Modified), DrugstoreDataSet1.VentasDataTable)

            consultar(VentasDataGridView)

            cnString

            Me.VwventasBindingSource.Filter = "nroventa = " & CSng(lblVenta.Text)

            lblDesc.Text = "Descripción del producto"

            lblStk.Text = "Stock actual"

            lblImporte.Text = "Importe unitario"

            txtCantidad.Text = ""

            lblSubt.Text = "Subtotal"

            calculoTotal()

            Return

        End Sub

        Private Sub TablaVentasToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TablaVentasToolStripMenuItem.Click

            Tablaventas.Show()

        End Sub

        Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click

            With VentasDataGridView

                .DataSource = VentasBindingSource

                .Refresh()

            End With

        End Sub

        Sub consultar(ByVal tabla As DataGridView)

            Dim adaptador = New SqlDataAdapter("select* from ventas", cnString)

            Dim dataS As New DataSet

            adaptador.Fill(dataS, "ventas")

            tabla.DataSource = dataS.Tables("ventas")

        End Sub

    End Class

    lunes, 9 de octubre de 2017 0:49
  • Fíjate en el Ventas_Load. Ahí tienes metidas varias llamadas al Fill de los TableAdapters. Eso es lo que hace que se llenen de datos. Copia la línea correspondiente al tableadapter cuyos datos quieres que se actualicen y pégala en donde haces el Insert (después de haber enviado el Insert a la base de datos).
    lunes, 9 de octubre de 2017 6:44