Исключение: предоставленная строка уже принадлежит элементу управления DataGridView
Я получаю следующее исключение при копировании строки в том же элементе управления представления таблицы данных System.InvalidOperationException не обработан. Message="Предоставленная строка уже принадлежит элементу управления DataGridView." Ниже приведен метод копирования, который копирует выбранные строки в currentRowCollection как DataGridViewSelectedRowCollection.
copy()
{
If (DataGridViewWorkGroupDetails.Rows.Count = 1) Then
Exit Sub
End If
Try
pasteMode = "copy"
currentRowCollection = DataGridViewWorkGroupDetails.SelectedRows
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "frmworkgroup:copyRowCollectionError")
End Try
}
И в методе вставки
paste()
{
Dim row As DataGridViewRow
Dim myRow As DataGridViewRow
For Each row In currentRowCollection
myRow = row
myRow.Cells.Item(1).Value = String.Empty
DataGridViewWorkGroupDetails.Rows.Insert(DataGridViewWorkGroupDetails.Rows.Count - 1, myRow)
Next
}
Во время вставки в метод вставки я хочу, чтобы 1-й столбец оставался пустой строкой. Когда я копирую строку из одного представления данных в другое, он работает, но когда я копирую в то же представление данных, добавляется исключение. Предоставленная строка уже принадлежит элементу управления DataGridView
1 ответ
Проблема в том, что вы используете ссылку на датаров. Строка в
For Each row In currentRowCollection
на самом деле ссылка на строку, которая уже существует в dataview.
Вам нужно сделать глубокую копию данных в строке, прежде чем вызывать вставку.
myRow = DataGridViewWorkGroupDetails.NewRow();
myRow.ItemArray = row.ItemArray;
DataGridViewWorkGroupDetails.Rows.Add(myRow);
Я не проверял этот код, но он должен работать