2011-09-15 43 views
0

我有一個命令類(希望)使用DataGridViewRow作爲成員以執行和撤消。當我嘗試將傳入的dgvr分配給構造函數中的成員行時(例如_row = r;),它顯示我得到一個引用,而不是新副本,從而使撤消操作變得不可能(原始dgvr被刪除然後成員行變空)。按值複製DataGridViewRow?

我還試圖通過MSDN上的「複製」行如下:

public DataGridViewRow CloneWithValues(DataGridViewRow row) 
{ 
    DataGridViewRow clonedRow = (DataGridViewRow)row.Clone(); 
    for (Int32 index = 0; index < row.Cells.Count; index++) 
    { 
     clonedRow.Cells[index].Value = row.Cells[index].Value; 
    } 
    return clonedRow; 
} 

然而,這似乎是離開背後的架構,我可以不上名字訪問字段(例如_row.Cells [「critical」]。Value)。

如何通過DataGridViewRow的值進行復制?

+0

難道你沒有在DataGridView級別的架構?如果您打算在不同的DataGridView對象中使用克隆的行,那麼當您將它作爲原始DataGridView對象的克隆副本時,我感覺DataGridView對象將擁有該模式。 – Arun

+0

我已經發現了一個令人討厭的解決方法:只是讓該行不可見,而不是在完成udpate後刪除它。這會在需要撤消的情況下保留數據。 – Handprint

回答

1

我想嘗試一種更簡單的方法,在數據表級別調用datatable.Rows.Add並傳遞修改後的datarow.ItemArray。

這工作,如果你仍然有一個引用你的表應該是我認爲的網格數據源。我在我的項目中使用這個,通常工作得很好。

+0

我可能不得不按照你的建議重構。我使用DataGridView來更新用戶選擇的行(給他們一個複選框)。然後,我會通過dgv循環並根據選中的框進行更新。我是否認爲現在我必須更新DataTable以包含僅由用戶選擇的行,然後循環訪問DataTable? – Handprint

+1

你的答案奏效。我將DataTable.Row.ItemArray傳遞給一個新的Object []。除了一些鑄造問題,它工作得很好。 – Handprint

+0

很高興幫助:) –