исключение: предоставленная строка уже принадлежит элементу управления DataGridView - PullRequest
0 голосов
/ 14 февраля 2012

Я получаю следующее исключение при копировании строки в том же элементе управления представлением таблицы данных 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 Ответ

0 голосов
/ 14 февраля 2012

Проблема в том, что вы используете ссылку на датаров.Строка в

For Each row In currentRowCollection

на самом деле является ссылкой на строку, которая уже существует в представлении данных.

Вам необходимо сделать глубокую копию данных в строке, прежде чем вызывать вставку.

myRow = DataGridViewWorkGroupDetails.NewRow();
myRow.ItemArray = row.ItemArray;
DataGridViewWorkGroupDetails.Rows.Add(myRow);

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

...