См. этот ответ , который уже охватывает копирование из одного DataGridView в другой.
Я взял код и конвертировал в vb.net используя онлайн-конвертер .
Чтобы этот код работал, создайте новый проект с двумя формами (Form1, Form2), каждая из которых имеет DataGridView (обе с именем DataGridView1). Поместите кнопку в Form1 (Button1). Затем вставьте код в соответствующий файл кода каждой формы.
Form1
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
DataGridView1.DataSource = {"A", "B", "C"}.Select(Function(s) New With {.Value = s}).ToList()
Form2.Show()
End Sub
Public Sub Foo()
Form2.Bar(DataGridView1)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Foo()
End Sub
End Class
Form2
Public Class Form2
Public Sub Bar(dgv_org As DataGridView)
Dim dgv_copy = DataGridView1
Try
If dgv_copy.Columns.Count = 0 Then
For Each dgvc As DataGridViewColumn In dgv_org.Columns
dgv_copy.Columns.Add(TryCast(dgvc.Clone(), DataGridViewColumn))
Next
End If
Dim row As DataGridViewRow = New DataGridViewRow()
For i As Integer = 0 To dgv_org.Rows.Count - 1
row = CType(dgv_org.Rows(i).Clone(), DataGridViewRow)
Dim intColIndex As Integer = 0
For Each cell As DataGridViewCell In dgv_org.Rows(i).Cells
row.Cells(intColIndex).Value = cell.Value
intColIndex += 1
Next
dgv_copy.Rows.Add(row)
Next
dgv_copy.AllowUserToAddRows = False
dgv_copy.Refresh()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
End Class