none
Pasar datos en formularios distintos RRS feed

  • Pregunta

  • Buenas , logre pasar informacion entre grid en distintos form pero deseo que no se visualize el Segundo form donde guardo los datos del from 1

    Espero explicarme tengo un from factura , pero para llenarlo tengo que abrir donde se encuentran los datos, yo deseo que desde donde estan los datos se vayan guardando en un form factura , pero sin necesidad de abrirlo como si fuera un carro de compras ir guardando los datos y al final ver todo lo seleccionado

    from factura

    public Class Factura
        'Creo mis variables y columnas tipo "públicas" a mostrar en el DatGridView
        'porque las invocaré desde el formulario "BuscaArticulos".
        Public Dt As New DataTable
        Public Dr As DataRow
    
        Public DcCodigo As New DataColumn("Código", GetType(System.String))
        Public DcDescripcion As New DataColumn("Descripción", GetType(System.String))
        Public DcCantidad As New DataColumn("Cantidad", GetType(System.Int16))
        Public DcPrecio As New DataColumn("Precio", GetType(System.Decimal))
        Public DcImporte As New DataColumn("Importe", GetType(System.Decimal))
    
        Private Sub Factura_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Cargar imagen en botón.
            Button2.Image = System.Drawing.Bitmap.FromFile("imagenes\Facebook_logo.PNG")
            Button3.Image = System.Drawing.Bitmap.FromFile("imagenes\Twitter_logo.PNG")
            Button4.Image = System.Drawing.Bitmap.FromFile("imagenes\Youtube_logo.jpg")
    
            'Aplico un tipo de borde a las cajas de texto.
            Me.TxtSubTotal.BorderStyle = BorderStyle.FixedSingle
            Me.TxtIGV.BorderStyle = BorderStyle.FixedSingle
            Me.TxtTotal.BorderStyle = BorderStyle.FixedSingle
    
            'Configure la columna Código para que sea única.
            DcCodigo.Unique = True
            'Agrego las columnas en el DataTable para luego cargarlas en el DataGridView.
            With Dt.Columns
                .Add(DcCodigo)
                .Add(DcDescripcion)
                .Add(DcCantidad)
                .Add(DcPrecio)
                .Add(DcImporte)
            End With
            Me.DgvFactura.DataSource = Dt
    
            'Formato a su gusto:
            With Me.DgvFactura
                .AllowUserToAddRows = False
                .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
                .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllHeaders
                .ReadOnly = True
                .SelectionMode = DataGridViewSelectionMode.FullRowSelect
                .ShowCellToolTips = False
    
                .Columns("Código").Visible = True
                .Columns("Código").Width = 70
                .Columns("Código").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("Código").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    
                .Columns("Descripción").Visible = True
                .Columns("Descripción").Width = 340
                .Columns("Descripción").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("Descripción").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
    
                .Columns("Cantidad").Visible = True
                .Columns("Cantidad").Width = 70
                .Columns("Cantidad").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("Cantidad").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    
                .Columns("Precio").Visible = True
                .Columns("Precio").Width = 70
                .Columns("Precio").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("Precio").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    
                .Columns("Importe").Visible = True
                .Columns("Importe").Width = 70
                .Columns("Importe").DefaultCellStyle.Format = "##,##0.00"
                .Columns("Importe").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("Importe").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End With
        End Sub
    
        Private Sub BtnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnBuscar.Click
            BuscarArticulos.ShowDialog()
        End Sub

    from donde se encuentran los datos

    Imports System.Data.SqlClient
    Public Class BuscarArticulos
        'Realizo mi conexión a la base de datos.
        Dim Conexion As String = "Base de datos"
        Dim Cn As New SqlConnection(Conexion)
    
        Private Sub ListarDataGridView()
            'Creo mi variable que almacenará el comando (la orden en sql) que está en el procedimiento almacenado.
            Dim Cmd As New SqlCommand("Sp_ListarArticulo", Cn)
            'La variable que contiene el comando le indico que será de tipo "Procedimiento Almacenado".
            Cmd.CommandType = CommandType.StoredProcedure
            'El comando lo asocio a la conexión.
            Cmd.Connection = Cn
    
            'Creo un adaptador que contiene el comando.
            Dim Da As New SqlDataAdapter(Cmd)
            'Indicando los parámetros del Sp.
            With Da.SelectCommand.Parameters
                .Add("@NombreArticulo", SqlDbType.VarChar, 50).Value = Me.TxtArticulo.Text
                .Add("@Estado", SqlDbType.VarChar, 1).Value = "H"
            End With
            'Creo mi DataTable.
            Dim DtListar As New DataTable
            'Creo una nueva isntancia del DtaTable.
            DtListar = New DataTable
            'Los datos obtenidos que trajo el adaptador han sido depositados en el DataTable
            'para poder manipularlos mostrándolos en el DatagridView.
            Da.Fill(DtListar)
            Me.DgvArticulos.DataSource = DtListar
    
            'Creo un contador para los registros.
            Dim Fila As Integer = Me.DgvArticulos.Rows.Count
            If Fila = 0 Then Me.LblCantidad.Text = Fila & " Registro encontrado...!"
            If Fila = 1 Then Me.LblCantidad.Text = Fila & " Registro encontrado...!"
            If Fila > 1 Then Me.LblCantidad.Text = Fila & " Registros encontrados...!"
        End Sub
    
        Private Sub FormatoDataGridView()
            'Formato a su gusto:
            With Me.DgvArticulos
                .AllowUserToAddRows = False
                .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
                .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllHeaders
                .ReadOnly = True
                .SelectionMode = DataGridViewSelectionMode.FullRowSelect
                .ShowCellToolTips = False
    
                .Columns("idart").HeaderText = "Código"
                .Columns("idart").Visible = True
                .Columns("idart").Width = 70
                .Columns("idart").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("idart").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    
                .Columns("nombre").HeaderText = "Artículo"
                .Columns("nombre").Visible = True
                .Columns("nombre").Width = 250
                .Columns("nombre").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("nombre").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
    
                .Columns("p_pvp").HeaderText = "PVPx"
                .Columns("p_pvp").Visible = True
                .Columns("p_pvp").Width = 70
                .Columns("p_pvp").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("p_pvp").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    
                .Columns("p_blister").HeaderText = "PVPx Blister"
                .Columns("p_blister").Visible = True
                .Columns("p_blister").Width = 70
                .Columns("p_blister").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("p_blister").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    
                .Columns("p_fraccion").HeaderText = "PVPx Fracción"
                .Columns("p_fraccion").Visible = True
                .Columns("p_fraccion").Width = 70
                .Columns("p_fraccion").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns("p_fraccion").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    
                .Columns("imagen").Visible = False
            End With
        End Sub
    
        Private Sub BuscarArticulos_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            Me.TxtArticulo.Text = ""
            Me.TxtCantidad.Text = ""
            Me.TxtArticulo.Focus()
        End Sub
    
        Private Sub BuscarArticulos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Call ListarDataGridView()
            Call FormatoDataGridView()
    
            'Aplico un tipo de borde a las cajas de texto.
            Me.TxtArticulo.BorderStyle = BorderStyle.FixedSingle
            Me.TxtCantidad.BorderStyle = BorderStyle.FixedSingle
        End Sub
    
        Private Sub TxtArticulo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxtArticulo.TextChanged
            Call ListarDataGridView()
        End Sub
    
        Private Sub TxtCantidad_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtCantidad.KeyPress
            'valido para que se ingrese solo números
            If InStr("0123456789" & Chr(8), e.KeyChar) Then
                e.Handled = False
            Else
                MsgBox("Solo se aceptan Números.", MsgBoxStyle.Exclamation, "Aviso")
                e.Handled = True
            End If
        End Sub
    
        Private Sub DgvArticulos_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DgvArticulos.DoubleClick
            'Controlo el error que se podría generar si hay duplicado de registro validado por el "Cógigo".
            Try
                'Condiciono si no ingreso la cantidad.
                If Me.TxtCantidad.Text = "" Then
                    MsgBox("Ingresar la cantidad a vender", MsgBoxStyle.Exclamation, "Aviso")
                    Me.TxtCantidad.Focus()
                Else 'De lo contrario.
                    Dim DgvFila As DataGridViewRow = Me.DgvArticulos.CurrentRow
                    With Factura
                        .Dr = Factura.Dt.NewRow
                        .Dr(Factura.DcCodigo) = DgvFila.Cells("idart").Value.ToString
                        .Dr(Factura.DcDescripcion) = DgvFila.Cells("nombre").Value.ToString
                        .Dr(Factura.DcCantidad) = Me.TxtCantidad.Text
                        .Dr(Factura.DcPrecio) = DgvFila.Cells("p_fraccion").Value.ToString
                        .Dr(Factura.DcImporte) = Me.TxtCantidad.Text * DgvFila.Cells("p_fraccion").Value.ToString
                        .Dt.Rows.Add(Factura.Dr)
                    End With
                        'Le indico al DataGridView de la Factura que no seleccione ninguna fila.
                        Factura.DgvFactura.CurrentRow.Selected = False
    
                        'Creo un contador para los registros de la Factura.
                        Dim Fila As Integer = Factura.DgvFactura.Rows.Count
                        If Fila = 0 Then Factura.LblCantidad.Text = Fila & " Registro encontrado...!"
                        If Fila = 1 Then Factura.LblCantidad.Text = Fila & " Registro encontrado...!"
                        If Fila > 1 Then Factura.LblCantidad.Text = Fila & " Registros encontrados...!"
    
                        'Creo mi DataTable y variables para contar las celdas de la columna "Importe" de la Factura.
                        Dim DtBuscar As New DataTable
                        Dim N As Integer
                        Dim Total, TotalNeto, IGV As Decimal
    
                        'Creo un bucle que me permita contar.
                        For N = 0 To Factura.Dt.Rows.Count - 1
                        Total += Factura.Dt.Rows(N)("Importe") 'Nombre de la columna del formulario Factura.
                        Next
                        Factura.TxtTotal.Text = Total.ToString("##,##0.00")
                        TotalNeto = Factura.TxtTotal.Text
                        IGV = TotalNeto * 0.18
                        Factura.TxtIGV.Text = IGV
                        Factura.TxtSubTotal.Text = TotalNeto - IGV
    
                        'Cierro el formulario.
                        Me.Close()
                End If
            Catch ex1 As System.Data.ConstraintException
                MsgBox("El Artículo ya ha sido seleccionado", MsgBoxStyle.Information, "Verificar")
                Me.TxtArticulo.Text = ""
                Me.TxtCantidad.Text = ""
                Me.DgvArticulos.CurrentRow.Selected = False
                Me.TxtArticulo.Focus()
            Catch ex2 As Exception
                MsgBox("El error es: " & ex2.Message)
            End Try
        End Sub
    
    
    
    
    End Class

    jueves, 7 de febrero de 2019 19:54

Todas las respuestas

  • Hola Darwin123456

    Gracias por subir tu consulta a los foros de MSDN te comento que en el siguiente URL se expone un caso similar al tuyo, espero que pueda servirte de lo contrario estaremos realizando una búsqueda más profunda al respecto.

    https://social.msdn.microsoft.com/forums/es-ES/dd340b34-19e3-4f25-99e2-d0f4d90c63d3/pasar-datos-de-un-gridview-a-otro-gridview-en-diferentes-formularios

    viernes, 8 de febrero de 2019 19:02
    Moderador
  • Es similar a lo que hago pero deseo hacer un estilo carito de compras que s guarde antes no darle click
    viernes, 8 de febrero de 2019 23:14