Как скопировать содержимое одного DataGridview в другую форму DataGridview

Как скопировать содержимое в одном DataGridview в другое DataGridview, которое находится в другой форме

For i As Integer = DataGridView1.Rows.Count - 1 To 0 Step -1
    With DataGridView1.Rows(i)
        DataGridView2.Rows.Insert(0, .Cells(0).Value, .Cells(1).Value, .Cells(2).Value, .Cells(3).Value)
    End With
Next

person Mahjoubi houssem    schedule 15.04.2019    source источник
comment
С какой проблемой вы столкнулись? Также вы заполняете первый DataGridView из источника, если это так, вам не нужно вручную добавлять строки из первого во второй. Есть много способов справиться с этим, но в настоящее время в сообщении отсутствует информация, пожалуйста, обновите, чтобы мы могли помочь вам в дальнейшем.   -  person zaggler    schedule 15.04.2019
comment
Я читаю текстовый файл в сетке данных и проверяю, существуют ли эти данные в базе данных или нет после тестирования. Я хочу скопировать их в другую форму с представлением данных, где я добавил другие столбцы для обновления базы данных из нее, проблема, я понятия не имею, как он будет захватывать строки из формы и отправлять их в другое представление данных в форме1   -  person Mahjoubi houssem    schedule 15.04.2019
comment
Выдает ли ваш код выше какое-либо исключение? или что вы ожидаете получить и не получаете?   -  person preciousbetine    schedule 15.04.2019
comment
ИМХО, у вас должен быть класс для работы, изучите создание классов для хранения ваших данных из текстового файла, который вы читаете. Затем эти данные можно отображать/использовать/распространять/обновлять в любом месте, где вам это нужно. Во-первых, мы не знаем, как выглядит этот текстовый файл, как вы проверяете БД, чтобы увидеть, существуют ли эти данные...? Здесь много неопределенности, о которой мы не знаем, чтобы сформировать хороший ответ, чтобы помочь вам. Конечно, мы могли бы выбросить ответ, но это действительно решит вашу проблему?   -  person zaggler    schedule 15.04.2019
comment
я понятия не имею, как он будет захватывать строки из формы и отправлять их в другое представление сетки данных в форме 1. Вам нужна ссылка на другую форму. Какие формы участвуют? Какие формы показывают какие? Подробности, мой друг...   -  person Idle_Mind    schedule 15.04.2019
comment
мой код копирует данные из сетки данных в другую в той же форме, но я хочу использовать другую сетку данных в другой форме, поэтому я понятия не имею, как это работает, только у меня есть команда для получения значения из сетки данных, и я могу перейти в другую форму (DataGridView1. CurrentRow.Cells(0).Value.ToString)   -  person Mahjoubi houssem    schedule 15.04.2019


Ответы (1)


См. этот ответ, который уже касается копирования из одного DataGridView в другой.

Я взял код и преобразовал его в vb.net с помощью онлайн-конвертера.

Чтобы этот код работал, создайте новый проект с двумя формами (Form1, Form2), в каждой из которых будет DataGridView (обе названы DataGridView1). Поместите кнопку на форму Form1 (Button1). Затем вставьте код в соответствующий файл кода каждой формы.

Форма1

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

Форма2

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
person djv    schedule 15.04.2019
comment
Итак, вы публикуете ответ из другого ответа вместо того, чтобы голосовать за закрытие дубликата, скажем, я запутался... - person zaggler; 15.04.2019
comment
Прошу прощения за это ... вас смутил термин «дубликат» или что? - person djv; 15.04.2019
comment
Нет, я говорю, зачем вам копировать ответ для перевода для OP вместо того, чтобы голосовать за закрытие или просто предоставлять ссылку в комментарии? Зачем нам этот код снова в другом месте, не надо извиняться :) - person zaggler; 15.04.2019
comment
Потому что это не дубликат. ОП спрашивает, как скопировать из dgv одной формы в dgv другой формы. Связанный ответ касается только dgv в dgv. Этот ответ, как вы можете видеть, сильно отличается от связанного. - person djv; 15.04.2019
comment
Понятно, но вы имеете дело с DataGridView в любом случае правильно? Реальная проблема заключается в переходе от DataGridView к DataGridView... верно? ОП сказал в комментарии my code copy data from datagrid to another in same form .. Я думаю, там так же запутались? - person zaggler; 15.04.2019
comment
Я написал это перед любым комментарием. Что еще за -2 повторения? - person djv; 15.04.2019
comment
я хочу поместить таблицу данных вместо {A, B, C} и не работает DataGridView1.DataSource = {A, B, C}.Select(Function(s) New With {.Value = s}).ToList() - person Mahjoubi houssem; 15.04.2019
comment
djv ваш код отвечает именно то, что я хочу, но мне трудно это понять, теперь мне нужно, как я уже сказал, заменить {A, B, C} на datatable - person Mahjoubi houssem; 15.04.2019
comment
Я не видел, как вы поместили данные в первое представление данных, поэтому я поместил свои собственные данные для тестирования. Просто сделай это так, как ты делал это до меня. - person djv; 15.04.2019
comment
Хорошо, большое спасибо, я получаю данные из текстового файла следующим образом: ` Dim ouvrir As New OpenFileDialog If ouvrir.ShowDialog = DialogResult.OK Then Dim sr As New StreamReader (ouvrir.FileName), хотя и не sr.EndOfStream dt2.Rows.Add (sr.ReadLine .Split(CChar(vbTab))) End While End If` - person Mahjoubi houssem; 16.04.2019