Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
1

Вставка данных из одного DataGridView1 в другой DataGridView2

09.09.2014, 18:17. Показов 4285. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! На Форме есть 2 DataGridView, в DataGridView1 ежеминутно будут обновляться данные, необходимо, скопировать их и просто вставить в DataGridView2.
VB.NET
1
2
DataGridView1.SelectAll()
        Clipboard.SetDataObject(DataGridView1.GetClipboardContent())
Вот он копирует данные,а вот как их вставить не знаю, заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2014, 18:17
Ответы с готовыми решениями:

Вывод данных из DataGridView1 и DataGridView2 в Excel
Есть 2 таблицы DataGridView. структура первой таблицы: №п/п, ФИО, код должности. (гружу эти...

DataGridView1 like DataGridView2
Доброе время суток. Подскажите пожалуйста, как использовать условие отображения информация в...

Передача данных из dataGridView1 в dataGridView2
Две таблицы находятся на одной форме, в первую записываются значения(номер поезда, пункт...

Запись всех данных из DataGridView1 в ячейку DataGridView2
Подскажите пожалуйста как записать все данные из DataGridView1 в ячейку DataGridView2?

16
Заблокирован
09.09.2014, 18:29 2
Так не делают. Через буфер обмена - это же изврат жуткий.
DataGridView дает доступ к значениям ячеек напрямую
C#
1
dataGridView1.Rows[номер строки от 0].Cells[номер столбца от 0].Value = dataGridView2.Rows[номер строки от 0].Cells[номер столбца от 0].Value;
или просто
C#
1
dataGridView1[столбец, строка].Value = dataGridView2[столбец, строка].Value;
И так по всем строкам и столбцам во вложенном цикле
Еще во второй грид нужно предварительно добавить строк и столбцов, если их меньше, чем в первом
Для этого .Rows.Add() и .Columns.Add() соответственно.
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
09.09.2014, 18:38 3
Предположительно один раз написать
VB.NET
1
DataGridView2.DataSource = DataGridView1.DataSource
Однако у меня грид реально привязан к данным, а вот что там у Вас - неизвестно
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
09.09.2014, 18:48  [ТС] 4
Памирыч,OutLet
VB.NET
1
DataGridView2.DataSource = DataGridView1.DataSource
Этот код сделал своё дело, а как сделать, так чтобы при нажатии на кнопку, он не обновлял данные, а добавлял(типа базы данных) в DataGridView2
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
09.09.2014, 19:01 5
Вопрос не понятен
Если первый грид у Вас привязан к источнику данных, второй привязан к первому, то данные будут синхронизированы. Что изменилось в первом, то изменится и во втором
0
OutLet
09.09.2014, 19:05
  #6

Не по теме:

VB.NET
1
DataGridView2.DataSource = DataGridView1.DataSource
И правда ведь. Один забивает гвозди микроскопом, другой приходит и предлагает взять отвертку, и только третий советует молоток :)

0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
09.09.2014, 19:11 7
OutLet, да, но вдруг у автора темы гриды заполняются просто - кодом, и ни к каким данным не привязан?

В таком случае пришлось бы тоже изобретать, например, сначала создать DataTable, добавить нужное количество столбцов, а уж потом привязать к обоим DGV
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
09.09.2014, 19:22  [ТС] 8
Создал DAtaTable, вставил столбцы и строки, но при выполнении он вырезает
Visual Basic
1
 DataGridView2.Rows(0).Cells(0).Value
,а надо скопировать ,и никуда не вставляет )

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 Dim dk As New DataTable
        ' Dim rows As String
        dk.Columns.Add("1")
        dk.Columns.Add("2")
        dk.Columns.Add("3")
        dk.Columns.Add("4")
        dk.Columns.Add("5")
        dk.Columns.Add("6")
        dk.Columns.Add("7")
        dk.Columns.Add("8")
        dk.Columns.Add("9")
        dk.Columns.Add("10")
        dk.Columns.Add("11")
        dk.Columns.Add("12")
        dk.Columns.Add("13")
        dk.Columns.Add("14")
        dk.Columns.Add("15")
        dk.Columns.Add("16")
        dk.Columns.Add("17)
        dk.Rows.Add()
        dk.Rows.Add()
        dk.Rows.Add()
        dk.Rows.Add()
        dk.Rows.Add()
        dk.Rows.Add()
        dk.Rows.Add()
        dk.Rows.Add()
        dk.Rows.Add()
 
        DataGridView4.DataSource = dk
        dk.Rows.Add()
      
 
 
 
        ' DataGridView2(1, 1).Value = DataGridView4(1, 1).Value
        DataGridView2.Rows(0).Cells(0).Value = DataGridView4.Rows(0).Cells(0).Value
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
09.09.2014, 19:49 9
На моем примере
VB.NET
1
2
3
4
5
        Dim Dt As New DataTable("MyTable")
        Dt.Columns.Add("Col1")
        Dt.Columns.Add("Col2")
        DataGridView1.DataSource = Dt
        DataGridView2.DataSource = Dt
У Вас какие-то движения с отдельными ячейками, я не знаю, для чего они
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
09.09.2014, 19:57  [ТС] 10
В DAtaGridView1 каждые 2 минуты, будут подгружаться данные, вот за эти 2 минуты, необходимо скопировать данные из DataGridView1 в DataGridView2, так, чтобы через 2 минуты уже новые данные в DAtaGridView1, при копировании в DAtaGridView2,добавлялись, добавлялись и добавлялись.
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
09.09.2014, 20:05 11
Лучший ответ Сообщение было отмечено visak как решение

Решение

Заведите два DataTable
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Dim Dt As New DataTable
    Dim Dt2 As New DataTable
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        Dt.Columns.Add("Col1")
        Dt.Columns.Add("Col2")
 
        Dt2.Columns.Add("Col1")
        Dt2.Columns.Add("Col2")
 
        DataGridView1.DataSource = Dt
        DataGridView2.DataSource = Dt2
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        For Each R As DataRow In Dt.Rows
            Dt2.ImportRow(R)
        Next
    End Sub
2
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
10.09.2014, 10:34  [ТС] 12
Да, это то что надо! Спасибо!

Добавлено через 1 час 47 минут
Вот, только еще маленький нюанс, почему то при копировании, он стирает первую строку в DAtaGridView, а так четко работает...

Добавлено через 12 часов 9 минут
Разобрался, получилось.
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
11.09.2014, 20:52  [ТС] 13
Памирыч, посмотрите код, это парсинг таблицы,
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 Dim j, i As Integer
        '  Dim dt As New DataTable
        Dim doc As New HtmlDocument()
        On Error GoTo M
        doc.Load("C:\777\1.html")
        Dim table As HtmlNode = doc.DocumentNode.Descendants("table").ElementAt(15)
        Dim rows As IEnumerable(Of HtmlNode) = table.Descendants("tr")
        ' Dim PrimaryKey(0) As DataColumn
        'PrimaryKey(0) = dt.Columns("№ заявки")
        ' dt.PrimaryKey = PrimaryKey
        dt.Columns.Add("№ заявки")
        dt.Columns.Add("№ родительской заявки")
        dt.Columns.Add("Тип объекта")
        dt.Columns.Add("1")
        dt.Columns.Add("2")
        dt.Columns.Add("3")
        dt.Columns.Add("4")
        dt.Columns.Add("5")
        dt.Columns.Add("6")
        dt.Columns.Add("7")
        dt.Columns.Add("Статус")
        dt.Columns.Add("8")
        dt.Columns.Add("Время")
        dt.Columns.Add("Время 1")
        dt.Columns.Add("9")
        dt.Columns.Add("10")
        dt.Columns.Add("11")
M:
        DataGridView2.DataSource = dt
 
        For j = 0 To rows.Count - 1
            dt.Rows.Add()
            Dim cells As IEnumerable(Of HtmlNode) = rows.ElementAt(j).Descendants("td")
            For i = 0 To cells.Count - 1
                If cells.ElementAt(i).InnerText <> "" Then
                    Dim cel As HtmlNode = cells.ElementAt(i)
                    DataGridView2.Rows(j - 1).Cells(i).Value = cel.InnerText
 
                End If
 
            Next
 
        Next
        dt.Rows.RemoveAt(j - 1) ' удаляем строку в конце и ставим False в свойстве AllowUserToaadRow
затем, я использую, ваш код
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 On Error GoTo K
        '  On Error Resume Next
      
 
        Dt2.Columns.Add("№ заявки")
        Dt2.Columns.Add("№ родительской заявки")
        Dt2.Columns.Add("Тип объекта")
        Dt2.Columns.Add("Дата заведения")
        Dt2.Columns.Add("ФИО клиента")
        Dt2.Columns.Add("Тип документа")
        Dt2.Columns.Add("Дата рождения")
        Dt2.Columns.Add("Серия, номер документа")
        Dt2.Columns.Add("Удаленная точка продаж")
        Dt2.Columns.Add("ФИО менеджера")
        Dt2.Columns.Add("Статус")
        Dt2.Columns.Add("Дата/время в ДБО")
        Dt2.Columns.Add("Время")
        Dt2.Columns.Add("Время 1")
        Dt2.Columns.Add("Закреплена за")
        Dt2.Columns.Add("Продавец")
        Dt2.Columns.Add("№ клиента")
       
K:
        
        DataGridView4.DataSource = Dt2
      
        For Each R As DataRow In dt.Rows
 
            Dt2.ImportRow(R)
 
        Next
Он вставляет всё замечательно, но стирает первую строку в DT2, а она должна быть....
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
11.09.2014, 21:05 14
Я конечно же не могу воспроизвести весь ваш проект, но тот код работает как надо, у меня ничего не удаляется.
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
13.09.2014, 18:33  [ТС] 15
А можно как нибудь добавить исключение, я понимаю, что повторов не должно быть, но я дубликаты сначала удаляю, а потом вставляю время, пишет такую ошибку
VB.NET
1
На столбец "№ заявки" наложено ограничение по уникальности. Значение "771" уже имеется.
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
13.09.2014, 19:10 16
Цитата Сообщение от visak Посмотреть сообщение
добавить исключение
Так
VB.NET
1
2
3
4
5
        Try
            'Добавление записи
        Catch ex As Exception
 
        End Try
0
2 / 2 / 5
Регистрация: 08.09.2014
Сообщений: 174
21.09.2014, 03:06  [ТС] 17
Кстати вот еще способ
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
For rowIndex As Integer = 0 To (Me.ReadDataDataGridView.Rows.Count - 1)
    If (Not Me.ReadDataDataGridView.Rows(rowIndex).IsNewRow) Then
 
        Dim values As Object() = New Object(Me.ReadDataDataGridView.Columns.Count - 1) {}
 
        For columnIndex As Integer = 0 To (Me.ReadDataDataGridView.Columns.Count - 1)
            values(columnIndex) = Me.ReadDataDataGridView.Rows(rowIndex).Cells(columnIndex).Value
        Next
 
        Me.DataGridView1.Rows.Add(values)
 
    End If
Next
0
21.09.2014, 03:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2014, 03:06
Помогаю со студенческими работами здесь

Вывод данных в DataGridView2 из информации полученной по щелчку элемента в DataGridView1
Есть 2 заполненных DataGridView`a В первом заказчики Во втором заказы данного заказчика Суть...

Из dataGridView1 в dataGridView2
есть таблица с базой данных в ней 4 столбца 1 - имя 2-4 - число надо чтобы при изменении 2 -...

combobox - xml, из DataGridView1 в DataGridView2
Добрый день ув. форумчане , 2 вопроса. 1) Как из DataGridView1 перенести выбранный элемент в...

Вывод подматрицы из DataGridView1 в DataGridView2
Возникла вопрос с DataGridView!На форме 2 DataGridView, Первый заполняется матрицой random, и из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru