none
Pasar Datos entre form RRS feed

  • Pregunta

  • Tengo un form1 y form2 donde deseo pasar los datos de form1 a form2 sin abrirlo , llenarlo hasta que se abra el form2

    ya logro pasar los datos en entre grid de distintos form , les muestro mi codigo , espero me alla explicado y me puedan ayudar, lo que pasa que tengo que abrir el form2 para llenar el grid , el form1 es donde tengo mis datos , lo que deseo es llenarlo desde el form1 sin necesidad de abrir el form 2

    form1 donde paso mis datos al form2

       Dim result As DialogResult
            result = MessageBox.Show("¿Deseas Codificar Material?", "Codificacion", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
            If result = DialogResult.OK Then
                Try
                    For Each row As DataGridViewRow In DgvMaterialNuevo.Rows
                        Dim marcado As Boolean = Convert.ToBoolean(row.Cells("Insertar").Value) 'marcado es la variable que guarda la fila que se selecciono
                        If marcado Then
                            If Me.TxtDescripcionExtra.Text = "" Then
                                MsgBox("Ingresar Codigo", MsgBoxStyle.Exclamation)
                                Me.TxtDescripcionExtra.Focus()
    
                            Else
                                Dim DgvMaterialNuevo As DataGridViewRow = Me.DgvMaterialNuevo.CurrentRow
                                With FromInserccionCodigo
    
                                    .Dr = FromInserccionCodigo.Dt.NewRow
                                    .Dr(FromInserccionCodigo.DcCodigoExtraordinario) = Me.CboCodigo.Text
                                    .Dr(FromInserccionCodigo.DcDescripcionExtraodinario) = Me.TxtDescripcionExtra.Text.ToString
                                    .Dr(FromInserccionCodigo.DcIdMaterial) = DgvMaterialNuevo.Cells("Id_Material").Value.ToString
                                    .Dr(FromInserccionCodigo.DcCodigoMaterial) = DgvMaterialNuevo.Cells("Codigo_Material").Value.ToString
                                    .Dr(FromInserccionCodigo.DcDescripcionMaterial) = DgvMaterialNuevo.Cells("Descripcion_Material").Value.ToString
    
                                    .Dt.Rows.Add(FromInserccionCodigo.Dr)
                                    limpiarCampos()
    
    
                                End With
                                ' FromInserccionCodigo.DgvSolicitud.CurrentRow.IsSelected = False
    
                            End If
    
                        End If
    
                    Next
    
                Catch ex As Exception
                    MsgBox("El Error es:" & ex.Message)
                End Try
    
            End If
    Form2 donde lo abro para volver abrir el form1 y llenar mis datos
      Public DcDescripcionExtraodinario As New DataColumn("Descripcion_Extraordinario", GetType(System.String))
        Public DcCodigoMaterial As New DataColumn("Codigo_Material", GetType(System.String))
        Public DcDescripcionMaterial As New DataColumn("Descripcion_Material", GetType(System.String))
        Public DcProyecto As New DataColumn("Proyecto", GetType(System.String))
        Public DcIdMaterial As New DataColumn("IdMaterial", GetType(System.String))
        Public DcUsuario As New DataColumn("Usuario", GetType(System.String))
    
    
    
    
    'LOAD
    
    With Dt.Columns
                .Add(DcCodigoExtraordinario)
                .Add(DcDescripcionExtraodinario)
                .Add(DcIdMaterial)
                .Add(DcCodigoMaterial)
                .Add(DcDescripcionMaterial)
    
            End With
            Me.DgvSolicitud.DataSource = Dt

    miércoles, 29 de mayo de 2019 23:35

Respuestas

  • Hola:
    Este ejemplo consta de 2 Forms como los de las imágenes

    Copia y pega el siguiente código

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Public Class FrmPasarFilas
        Private moDataTable As New DataTable()
        Private Sub Form3_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptadores
                    Dim loDataAdapter As New SqlDataAdapter("SELECT * FROM Customers", loConexion)
                    loDataAdapter.Fill(moDataTable)
                    Me.DataGridView1.DataSource = moDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Me.WindowState = FormWindowState.Maximized
        End Sub
        Private Sub btnPasar_Click(sender As System.Object, e As System.EventArgs) Handles btnPasar.Click
            Dim loDatatable As DataTable = moDataTable.Clone
            Dim lDataRow As DataRow
            Try
                For Each loFila As DataGridViewRow In Me.DataGridView1.SelectedRows
                    lDataRow = loDatatable.NewRow
                    For Each Columna As DataColumn In loDatatable.Columns
                        ' Añadimos los datos
                        lDataRow.Item(Columna.ColumnName) = loFila.Cells(Columna.ColumnName).Value
                    Next
                    loDatatable.Rows.Add(lDataRow)
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message, "btnPasar_Click", MessageBoxButtons.OKCancel, MessageBoxIcon.Information)
            End Try
            Using loForm As New FrmRecibe
                loForm.DataTable = loDatatable
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    Option Explicit On
    Option Strict On
    Public Class FrmRecibe
        Public Property DataTable As DataTable

        Private Sub Form4_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Me.DataGridView1.DataSource = DataTable
            Me.WindowState = FormWindowState.Maximized
        End Sub
    End Class

    P.D.
    Me parece que NO has leido mi primera respuesta

    Un saludo desde Bilbo
    Carlos

    viernes, 31 de mayo de 2019 5:45
  • Hola:
    Pasar los datos desde Form1 hasta Form2 es 1 accion.
    Abrir Form2 es 1 accion.
    Una accion NO tiene nada que ver con la otra.
    Ejemplo:
    Se puede abrir Form2 sin pasarle ningun dato
    Se puede pasar datos desde Form1 hasta Form2 sin visualizar el Form2
    Se puede abrir Form2 y pasar datos desde Form1 hasta Form2
    En estos 3 casos necesariamente Form2 tiene que estar creado, has tenido que hacer algo como esto

        Using loForm As New Form2
           loForm.Datos=TU_DATATABLE      'Con esto se pasan los datos
           loForm.Show()                  'Con esto se visualiza el Form2
        End Using

    Dependiendo de las lineas que existan entre la creacion del Form y la destruccion, se ejecutaran las diversas opciones   

    Un saludo desde Bilbo
    Carlos 

    jueves, 30 de mayo de 2019 7:05

Todas las respuestas

  • Hola:
    Pasar los datos desde Form1 hasta Form2 es 1 accion.
    Abrir Form2 es 1 accion.
    Una accion NO tiene nada que ver con la otra.
    Ejemplo:
    Se puede abrir Form2 sin pasarle ningun dato
    Se puede pasar datos desde Form1 hasta Form2 sin visualizar el Form2
    Se puede abrir Form2 y pasar datos desde Form1 hasta Form2
    En estos 3 casos necesariamente Form2 tiene que estar creado, has tenido que hacer algo como esto

        Using loForm As New Form2
           loForm.Datos=TU_DATATABLE      'Con esto se pasan los datos
           loForm.Show()                  'Con esto se visualiza el Form2
        End Using

    Dependiendo de las lineas que existan entre la creacion del Form y la destruccion, se ejecutaran las diversas opciones   

    Un saludo desde Bilbo
    Carlos 

    jueves, 30 de mayo de 2019 7:05
  • Con esto abro mi form 2 , lo que deseo es lograr como un carrito de compras donde vas seleccionanndo hasta que al final ver todo lo que seleccionaste

    My.Forms.FromSolicitud.ShowDialog()

    jueves, 30 de mayo de 2019 13:39
  • Hola:

    ¿ Lo que quieres es que en el Form1 presentas una serie de datos en un DGV, seleccionas n lineas y esas n lineas seleccionadas, mostrarlas en otro DGV en el Form2. ?
    Sino es asi puedes explicarlo un poco mejor

    Un saludo desde Bilbo
    Carlos

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 3 de junio de 2019 14:03
    jueves, 30 de mayo de 2019 19:19
  • Te explico en el form1 tengo datos en mi datagrid , lo que deseo realizer es seleccionar n datos y pasarlos al dgv del form2 pero no mostralos hasta que abra mi form2, lo que ami me pasa es que lo hago alrevez primero tengo que abrir el form2 , y luego mi form1 para poder llenar el datagrid , espero me alla explicado
    jueves, 30 de mayo de 2019 21:43
  • Hola:
    Este ejemplo consta de 2 Forms como los de las imágenes

    Copia y pega el siguiente código

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Public Class FrmPasarFilas
        Private moDataTable As New DataTable()
        Private Sub Form3_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptadores
                    Dim loDataAdapter As New SqlDataAdapter("SELECT * FROM Customers", loConexion)
                    loDataAdapter.Fill(moDataTable)
                    Me.DataGridView1.DataSource = moDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Me.WindowState = FormWindowState.Maximized
        End Sub
        Private Sub btnPasar_Click(sender As System.Object, e As System.EventArgs) Handles btnPasar.Click
            Dim loDatatable As DataTable = moDataTable.Clone
            Dim lDataRow As DataRow
            Try
                For Each loFila As DataGridViewRow In Me.DataGridView1.SelectedRows
                    lDataRow = loDatatable.NewRow
                    For Each Columna As DataColumn In loDatatable.Columns
                        ' Añadimos los datos
                        lDataRow.Item(Columna.ColumnName) = loFila.Cells(Columna.ColumnName).Value
                    Next
                    loDatatable.Rows.Add(lDataRow)
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message, "btnPasar_Click", MessageBoxButtons.OKCancel, MessageBoxIcon.Information)
            End Try
            Using loForm As New FrmRecibe
                loForm.DataTable = loDatatable
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    Option Explicit On
    Option Strict On
    Public Class FrmRecibe
        Public Property DataTable As DataTable

        Private Sub Form4_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Me.DataGridView1.DataSource = DataTable
            Me.WindowState = FormWindowState.Maximized
        End Sub
    End Class

    P.D.
    Me parece que NO has leido mi primera respuesta

    Un saludo desde Bilbo
    Carlos

    viernes, 31 de mayo de 2019 5:45
  • Private Sub btnPasar_Click(sender As System.Object, e As System.EventArgs) Handles btnPasar.Click
             Dim loDatatable As DataTable = moDataTable.Clone
             Dim lDataRow As DataRow
             Try
                 For Each loFila As DataGridViewRow In Me.DataGridView1.SelectedRows
                     lDataRow = loDatatable.NewRow
                     For Each Columna As DataColumn In loDatatable.Columns
                         ' Añadimos los datos
                         lDataRow.Item(Columna.ColumnName) = loFila.Cells(Columna.ColumnName).Value
                     Next
                     loDatatable.Rows.Add(lDataRow)
                 Next
             Catch ex As Exception
                 MessageBox.Show(ex.Message, "btnPasar_Click", MessageBoxButtons.OKCancel, MessageBoxIcon.Information)
             End Try
             Using loForm As New FrmRecibe
                 loForm.DataTable = loDatatable
                 loForm.ShowDialog()
             End Using
         End Sub
     End Class

    Perdon , estaba ocupado con cosas personales , pero ya cheque el codigo y me da un error en esta parte , me dice

    object reference no set to intance

    lunes, 3 de junio de 2019 15:14
  • Hola:
    El codigo esta SUPERprobado y NO tiene errores.
    ¿Puedes poner en que linea te da el error?

    Un saludo desde Bilbo
    Carlos

    lunes, 3 de junio de 2019 19:56
  • Ya lo cheque y el error era mio una disculpa, Ahora una consulta mas , como le harias para seleccionar varias filas , ejemplo , deseo pasar la fila 1 , y la fila 3 pero primero la marco para pasarlo al otro grid . Espero me apoyes Gracias por tu tiempo
    lunes, 3 de junio de 2019 23:29
  • Hola:
    ¿Pero has probado el ejemplo que te puse?
    Si realmente es eso lo que hace el ejemplo.
    En la linea
          For Each loFila As DataGridViewRow In Me.DataGridView1.SelectedRows
    lo que esta haciendo es recorrer las filas seleccionadas del DataGridView

    Un saludo desde Bilbo
    Carlos

    martes, 4 de junio de 2019 5:45
  • Si, lo entiendo , ya pasa el dato , lo que deseo el marcar multiples filas me explico , ya con tu ejemplo logre pasar la fila marcada , pero deseo pasar multiple filas

    Un saludo y gracias por tu tiempo

    martes, 4 de junio de 2019 13:42
  • Hola:

    > lo que deseo el marcar multiples filas me explico , ya con tu ejemplo logre pasar la fila marcada , pero deseo pasar multiple filas <

    Pero para eso, tienes que marcar NO 1 fila sino N filas

    Un saludo desde Bilbo
    Carlos

    martes, 4 de junio de 2019 18:15
  • >Pero para eso, tienes que marcar NO 1 fila sino N fila <

    Si, pero existe una function para hacerlo con el mouse , o con la tecla shift, o un Checkbox.

    martes, 4 de junio de 2019 18:22
  • Hola:
    Para marcar varia filas tienes que hacer click en la columna que marca la flecha con la tecla Control pulsada.

    Es igual que seleccionar ficheros con el explorador de windows


    Un saludo desde Bilbo
    Carlos

    martes, 4 de junio de 2019 18:32
  • Quizas tengo mal configurado el teclado , por que lo intento pero no sale :( , lo seguire intentando y o buscare otra manera con un checkbox para pasar los seleccionado .
    martes, 4 de junio de 2019 18:45