Исключение: предоставленная строка уже принадлежит элементу управления 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);

Я не проверял этот код, но он должен работать

Другие вопросы по тегам