2012-03-06 59 views
3

我需要一些幫助,因爲我對C#相對陌生。我基本上試圖克隆datagridview組件屬性(行/列內容不同)。克隆GUI組件

基本上我有一個標籤頁面的控制......,在如果用戶想要添加另一臺運行時間,一個新的頁面與新的DataGridView在具有相同屬性的現有datagridview的組件,但是創建:

string newpagetitle = "tab_page" + (tab_control01.TabCount + 1); 
TabPage newTab_page = new TabPage(newpagetitle); 

DataGridView clonedDGV = new DataGridView(); 

clonedDGV = this.dataGridView1; //need to clone this 
clonedDGV.Name=("DataGridView" + tab_control01.TabCount + 1); 
clonedDGV.DataSource = exam_Results_Table; 
newTab_page.Controls.Add(clonedDGV); 
this.tab_control01.TabPages.Add(newTab_page); 
+0

我不認爲你會得到你想要的這種方式......我會爲這種網格創建一個數據模板並將其綁定到數據源(視圖模型)。如果用戶創建一個新表(新數據源),則使用相同的數據模板將其綁定到網格的新實例。這會導致網格的「視覺克隆」,其中包含新數據。 – 2012-03-06 18:54:33

回答

2

而不是這個clonedDGV = this.dataGridView1你需要越過屬性並單獨複製它們。否則,您將重置clonedDGV僅僅是對舊數據網格的另一個參考。

注意:通常不可能「克隆」對象,除非它被設計爲被克隆。

4

你肯定不希望這樣做:

clonedDGV = this.dataGridView1; 

這行不克隆dataGridView1。相反,它只需要變量clonedDGV並將其指向dataGridView1指向的同一個網格對象。這意味着如果您對clonedDGV進行了任何更改,您也可以將它們設置爲dataGridView1。請記住,在C#中,(幾乎)所有對象變量實際上都是引用而不是對象本身。

在C#中沒有內置的方法克隆DataGridView。如果你想要做的是結構複製到一個新的網格,那麼你可以做這樣的事情:

DataGridView clonedDGV = new DataGridView(); 
foreach(DataGridViewColumn col in this.dataGridView1.Columns) { 
    clonedDGV.Columns.Add(new DataGridViewColumn(col.CellTemplate)); 
} 

這會給你用相同結構的新的網格,但沒有任何數據。如果您想要複製數據,則循環訪問原始網格中的行並將新行添加到新網格中。

如果還有其他屬性需要複製,只需在新網格上逐一設置即可。

編輯:如果你關心的是克隆你的原始網格的屬性,你必須自己做所有的工作。如果這是你打算經常做的事情,我建議你創建一個擴展方法,並將所有的邏輯放在那裏。事情是這樣的:

public static class Extentions { 
    public static DataTable Clone(this DataGridView oldDGV) { 
     DataGridView newDGV = new DataGridView(); 

     newDGV.Size = oldDGV.Size; 
     newDGV.Anchor = oldDGV.Anchor; 

     return newDGV; 
    } 
} 

一旦這樣被創建,你可以這樣調用:

DataGridView clonedDGV = dataGridView1.Clone(); 

你還是得寫一行的事項給你的每個屬性代碼,但在至少你的邏輯將在一個地方。

+0

我很清楚這一點...但我現在只是填寫它,只是爲了查看我的代碼是否工作......這是我需要更換的部分。 它不是我想要複製的列,而是組件的屬性,比如它的集合大小,邊界屬性等等。源/列是完全不同的 – Magikarp 2012-03-06 18:18:24

+0

沒有內建的方式來做你所要求的。您必須手動將新網格的每個屬性設置爲舊網格上該屬性的值。 – ean5533 2012-03-06 18:25:31

+0

awww ...謝謝。 ;( – Magikarp 2012-03-06 18:28:00