2012-02-14 2 views
0

Je reçois la suite exception tout en faisant face à la ligne de même DataGrid vue contrôle System.InvalidOperationException était unhandled message = « Row fourni appartient déjà à un contrôle DataGridView. » Ce qui suit est la méthode de copie qui copie des lignes sélectionnées dans currentRowCollection comme DataGridViewSelectedRowCollectionexception: Row fourni appartient déjà à un contrôle DataGridView

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 
     } 

Et dans la méthode de pâte

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 

} 

Au cours de la pâte dans la méthode de la pâte que je veux rester colonne 1ème sous forme de chaîne vide. Lorsque je copie la ligne d'un datagridview à un autre, cela fonctionne mais lorsque je copie dans la même vue de données, il ajoute une exception. La ligne fournie appartient déjà à un contrôle DataGridView

Répondre

0

Le problème est que vous utilisez une référence à une plage de données. La ligne

For Each row In currentRowCollection 

est en fait une référence à la ligne qui existe déjà dans la vue de données.

Vous devez effectuer une copie complète des données de la ligne avant d'appeler l'insertion.

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

Je ne l'ai pas testé ce code, mais il devrait fonctionner

+0

Est-ce que vous s'il vous plaît me donner un exemple de code pour que –

+0

son travail non vb.net ..Il est pas de méthode NewRow() pour DataGridViewWorkGroupDetails.NewRow(); –

Questions connexes