2011-06-13 133 views
3

所以基本上我有2 DataGridView,我需要將行從一個複製到另一個。將DataGridView的行復制到另一個DataGridView中

到目前爲止,我已經試過:

DataGridViewRowCollection tmpRowCollection = DataGridView1.Rows; 

DataGridViewRow[] tmpRowArray = new DataGridViewRow[tmpRowCollection.Count]; 
tmpRowCollection.CopyTo(tmpRowArray, 0);    

DataGridView2.Rows.AddRange((DataGridViewRow[]) tmpRowArray)); 

但它口口聲聲說

"Row provided already belongs to a DataGridView control." 

那麼什麼是該行的內容(DataGridView具有相同的列)複製的最佳方式?

回答

2

您使用的功能在以下鏈接

private DataGridView CopyDataGridView(DataGridView dgv_org) 
{ 
    DataGridView dgv_copy = new DataGridView(); 
    try 
    { 
     if (dgv_copy.Columns.Count == 0) 
     { 
      foreach (DataGridViewColumn dgvc in dgv_org.Columns) 
      { 
       dgv_copy.Columns.Add(dgvc.Clone() as DataGridViewColumn); 
      } 
     } 

     DataGridViewRow row = new DataGridViewRow(); 

     for (int i = 0; i < dgv_org.Rows.Count; i++) 
     { 
      row = (DataGridViewRow)dgv_org.Rows[i].Clone(); 
      int intColIndex = 0; 
      foreach (DataGridViewCell cell in dgv_org.Rows[i].Cells) 
      { 
       row.Cells[intColIndex].Value = cell.Value; 
       intColIndex++; 
      } 
      dgv_copy.Rows.Add(row); 
     } 
     dgv_copy.AllowUserToAddRows = false; 
     dgv_copy.Refresh(); 

    } 
    catch (Exception ex) 
    { 
     cf.ShowExceptionErrorMsg("Copy DataGridViw", ex); 
    } 
    return dgv_copy; 
} 

http://canlu.blogspot.com/2009/06/copying-datagridviewrow-to-another.html

+0

謝謝你,但我懷疑,這是複製這些行的最快方式。我正在搜索是否可以在沒有循環的情況下執行此操作。 – VAShhh 2011-06-13 20:58:12

+0

我會接受這個,因爲它似乎是獲得我需要的唯一方法。 – VAShhh 2011-06-13 21:13:52

1

您需要首先從原來的克隆行,然後添加到新的看法。 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrow.clone.aspx

+0

如果我做'DataGridView2.Rows.AddRange((DataGridViewRow [])tmpRowArray.clone()));'我得到同樣的錯誤。我需要在循環中克隆每一行嗎? :| – VAShhh 2011-06-13 21:01:06

+0

不幸的是我認爲是這樣。但是,如果原始datagridview綁定到數據集,則可以將第二個datagridview綁定到數據集的相同或克隆,並獲取您之後的內容。 – Bueller 2011-06-13 21:03:54

0

我會推薦使用支持DTO。不是直接處理行,而是創建一個包含GridView的所有列的DTO,然後使用它們的List作爲DataSource。然後,您只需添加/刪除行就可以在列表中添加/刪除DTO。

0

只是寫:

copyDGV.DataSource = mainDGV.DataSource;   
+0

歡迎來到Stackoverflow。請正確格式化你的代碼:)最好的問候 – YakovL 2017-07-29 12:31:00

相關問題