Member 11672076 Ответов: 1

Скопированная строка datagridview смещена


Я пытаюсь дублировать выделенную строку в datagridview databound. Код работает по большей части. Проблема недостатка заключается в том, что когда он вставляет новую строку, он перемещает ее по двум столбцам в строке. Не знаю, почему и где искать ответ на этот вопрос, поскольку я никогда не видел ничего подобного.

Что я уже пробовал:

Dim CopyRowIndex = OpeningsDataGridView1.CurrentRow.Index
               Dim dt As New DataTable
               dt = OpeningsDataGridView1.DataSource
               dt.Rows.Add(OpeningsDataGridView1.Rows(CopyRowIndex).Cells.Cast(Of DataGridViewCell).Select(Function(c) c.Value).ToArray)

Kornfeld Eliyahu Peter

Вы говорите о визуальной проблеме здесь?
Не могли бы вы объяснить подробнее, что вы подразумеваете под "перемещением его по двум столбцам в строке"?

Member 11672076

Я пытаюсь понять, как добавлять картинки, Но да, это визуально. Столбец один строка один имеет значение 3 в нем. Когда он копируется, он появляется в столбце 3 строка 2. Строка верна, а столбец-нет.

1 Ответов

Рейтинг:
1

Maciej Los

Что ж...

В случае если а Практическое руководство[^] элемент управления связан с datatable, вы не можете создать копию Ячейки datagridviewrow[^] объект.

Документация MSDN гласит::
Замечания

Коллекцию строк можно использовать для ручного заполнения элемента управления DataGridView вместо привязки его к источнику данных.


Видеть: Практическое руководство.Строк[^]


Вывод: вы должны добавить "строку" (запись) в свой datatable!
Шаги, которые нужно сделать:
1) получить выбранный DataGridViewRow и считайте значение ячейки, которая является уникальной
2) найдите это уникальное значение в таблице данных
3) добавить копию объект DataRow[^] к объекту DataTable

'get datatable
Dim dt As DataTable = DirectCast(dgv.DataSource, DataTable)
Dim ValueToFind = ... 'your logic here
'find unique value
Dim rowToCopy = dt.AsEnumerable() _
	.Where(Function(x) x.Field(Of Integer)("FieldName") = ValueToFind) _
	.FirstOrDefault()
'create new row
Dim nr = dt.NewRow()
'copy data
nr.ItemArray = rowToCopy.ItemArray
'add new row
dt.Rows.Add(nr)
're-bind datasource
dgv.DataSource = dt


Примечание: Точная копия DataRow не допускается в случае нарушения первичного ключа.