none
Pasar Todos los datos de un grid a otro en otro formulario

    Pregunta

  • Buenas, aqui provando otras opciones para realizar lo que quiero

    con este codigo:

     For Each row As DataGridViewRow In MetroGrid2.Rows
                MetroGrid3.Rows.Add(row.Cells(0).Value, row.Cells(1).Value, row.Cells(2).Value, row.Cells(3).Value, row.Cells(4).Value)
            Next

    paso toda la información de un Grid a otro grid, pretendo hacer esto mismo pero con un grid en otro formulario

    a ver si me ayudan :)

    jueves, 2 de marzo de 2017 18:05

Respuestas

  • Hola Jefry Zelaya,

    Otra forma sería enviando una lista de tipo DataGridViewRow mediante el constructor, y en el formulario hijo obtienes los datos y creas las filas.

    Algo como :

    Private Sub btnAbrirHijo_Click(sender As Object, e As EventArgs) Handles btnAbrirHijo.Click
    
        'Obtener una lista de DataGridViewRow
        Dim filas = DataGridView1.Rows.OfType(Of DataGridViewRow).
                            Where(Function(x) Not x.IsNewRow).ToList
    
        'Abrimos el formulario hijo enviando el parámetro
        Dim fh As New FormHijo(filas)
        fh.ShowDialog()
    
    End Sub

    Y en el formulario 'Hijo' agregas el parámetro en el constructor 'New()'.

    'Variable que almacenará el valor del parámetro
    Private filas As List(Of DataGridViewRow)
    
    'Constructor que recibe el parámetro
    Public Sub New(filas As List(Of DataGridViewRow))
    
        InitializeComponent()
    
        Me.filas = filas
    End Sub
    
    'Evento Load que se ejecuta cuando se carga el formulario
    Private Sub FormHijo_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        'Si la variable no es nulo es porque tiene los datos
        If filas IsNot Nothing Then
            'Agregamos las nuevas filas
            filas.ForEach(Sub(r) DataGridView1.Rows.Add(r.Cells(0).Value,
                                                        r.Cells(1).Value,
                                                        r.Cells(2).Value,
                                                        r.Cells(3).Value,
                                                        r.Cells(4).Value))
    
        End If
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Jefry Zelaya jueves, 2 de marzo de 2017 20:58
    jueves, 2 de marzo de 2017 20:51

Todas las respuestas

  • Lo que yo haría sería crear una propiedad en el formulario 2 para asignar un datatable que posea el contenido del datagridview del formulario 1.

    Public class Form2

    private property _dt as datatable

        Public Property dt() As datatable
            Get
                Return Me._dt
            End Get
            Set(ByVal value As datatable)
                Me._dt = value
            End Set
        End Property

    '... 'En este formulario trabajas el dt para asignarlo al datagrid que está aquí. end class

    Yo pensé en un datatable pero pásalo en el elemento que veas que mejor se adapta a tu proyecto.

    Te cuento que cada vez que debo pasar datos entre formularios lo hago a través de la declaración de propiedades. Después de todo, un formulario es una clase.

    Espero que te sirva de ayuda.

    jueves, 2 de marzo de 2017 19:27
  • Hola Jefry Zelaya,

    Otra forma sería enviando una lista de tipo DataGridViewRow mediante el constructor, y en el formulario hijo obtienes los datos y creas las filas.

    Algo como :

    Private Sub btnAbrirHijo_Click(sender As Object, e As EventArgs) Handles btnAbrirHijo.Click
    
        'Obtener una lista de DataGridViewRow
        Dim filas = DataGridView1.Rows.OfType(Of DataGridViewRow).
                            Where(Function(x) Not x.IsNewRow).ToList
    
        'Abrimos el formulario hijo enviando el parámetro
        Dim fh As New FormHijo(filas)
        fh.ShowDialog()
    
    End Sub

    Y en el formulario 'Hijo' agregas el parámetro en el constructor 'New()'.

    'Variable que almacenará el valor del parámetro
    Private filas As List(Of DataGridViewRow)
    
    'Constructor que recibe el parámetro
    Public Sub New(filas As List(Of DataGridViewRow))
    
        InitializeComponent()
    
        Me.filas = filas
    End Sub
    
    'Evento Load que se ejecuta cuando se carga el formulario
    Private Sub FormHijo_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        'Si la variable no es nulo es porque tiene los datos
        If filas IsNot Nothing Then
            'Agregamos las nuevas filas
            filas.ForEach(Sub(r) DataGridView1.Rows.Add(r.Cells(0).Value,
                                                        r.Cells(1).Value,
                                                        r.Cells(2).Value,
                                                        r.Cells(3).Value,
                                                        r.Cells(4).Value))
    
        End If
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Jefry Zelaya jueves, 2 de marzo de 2017 20:58
    jueves, 2 de marzo de 2017 20:51
  • Hola Jefry Zelaya,

    Otra forma sería enviando una lista de tipo DataGridViewRow mediante el constructor, y en el formulario hijo obtienes los datos y creas las filas.

    Algo como :

    Private Sub btnAbrirHijo_Click(sender As Object, e As EventArgs) Handles btnAbrirHijo.Click
    
        'Obtener una lista de DataGridViewRow
        Dim filas = DataGridView1.Rows.OfType(Of DataGridViewRow).
                            Where(Function(x) Not x.IsNewRow).ToList
    
        'Abrimos el formulario hijo enviando el parámetro
        Dim fh As New FormHijo(filas)
        fh.ShowDialog()
    
    End Sub

    Y en el formulario 'Hijo' agregas el parámetro en el constructor 'New()'.

    'Variable que almacenará el valor del parámetro
    Private filas As List(Of DataGridViewRow)
    
    'Constructor que recibe el parámetro
    Public Sub New(filas As List(Of DataGridViewRow))
    
        InitializeComponent()
    
        Me.filas = filas
    End Sub
    
    'Evento Load que se ejecuta cuando se carga el formulario
    Private Sub FormHijo_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        'Si la variable no es nulo es porque tiene los datos
        If filas IsNot Nothing Then
            'Agregamos las nuevas filas
            filas.ForEach(Sub(r) DataGridView1.Rows.Add(r.Cells(0).Value,
                                                        r.Cells(1).Value,
                                                        r.Cells(2).Value,
                                                        r.Cells(3).Value,
                                                        r.Cells(4).Value))
    
        End If
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    No tienes idea de lo mucho que me acabas de ayudar, infinitamente gracias brother  :)
    jueves, 2 de marzo de 2017 20:59