Usuario
Pasar datos en formularios distintos

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
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
-