exception:提供的行已经属于DataGridView控件

时间:2012-02-14 06:27:28

标签: vb.net datagridview datarowcollection

我在同一个数据网格视图控件中处理行时遇到异常 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复制到另一个时,它可以正常工作,但是当我复制到同一个datagridview时,它会添加异常。提供的行已经属于DataGridView控件

1 个答案:

答案 0 :(得分:0)

问题是您正在使用对数据行的引用。

中的行
For Each row In currentRowCollection

实际上是对数据视图中已存在的行的引用。

在调用插入符之前,您需要对行中的数据执行深层复制。

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

我没有测试过这段代码,但它应该可以运行