2017-01-14 19 views
-1

我有一個問題。讓我來解釋一下: 我創建了一個DataTable的'DataT'變量,並向這個變量添加了行。我有datagridview。我將DataT'分配給DataGridView的DataSource屬性後。 我得到'DataT'Rows.Count屬性。它的值爲10.但是當我刪除5行DataGridView時,此值從10減少到5。 那麼,爲什麼減少我的價值,我只是刪除DataGridView的行,但我沒有刪除'DataT'的行,雖然'DataT'的行數從10減少到5. 我還沒有解決這個問題。作業和綁定

編輯: 是的,我必然datatable.But同樣的問題還有其他state.I一個例子來說明:

DataTable Table1 = new DataTable(); 
DataTable Table2 = new DataTable(); 
DataRow Rows; 

private void Form1_Load(.......) 
{ 
    Tablo1.Columns.Add("Column1"); 
    Tablo1.Columns.Add("Column2"); 

    Rows = Table1.NewRow(); 
    Rows[0] = "Hello"; 
    Rows[1] = "Word"; 
    Table1.Rows.Add(Rows); 

    Rows = Table1.NewRow(); 
    Rows[0] = "Hello"; 
    Rows[1] = "Word"; 

    Table1.Rows.Add(Rows); 

    Table2 = Table1; 
    datagridview1.DataSource = Table1;  
    //This datagridview1 has 2 Rows and Table1 has 2 Rows. 

    datagridview1.Rows.RemoveAt(0); 
    //I am Removing one Row of datagridview1.Not from Table1. 

    //But Automatic removing Rows from Table1. 
    //Result=datagridview1 has 1 Row and Table1 has 1 Row.Why do remove rows from Table1? 
    //Even Rows Remove from Table2 when i remove rows from datagridview1.  
} 
+0

這真的不清楚自己在做什麼,你都試過了什麼問題或做什麼來解決它。特別是因爲沒有任何代碼可以說明它 – UnholySheep

+1

如何從DataGridView中刪除行?如果綁定到DataTable,則該綁定在兩個方向上都起作用。 –

+0

???? DataGridView/DataTable與byte []共有什麼。 –

回答

1

由於Henk Holtermancomment指出,有兩個原因使得Table2改變

  • Table1用作DataSource對於網格網格中的任何變化都會反映在其中。這是GridView的預期行爲。

    GridView擁有自己的Rows集合,當集合DataSource被更新時。對Rows集合的任何更改(如刪除項目)均適用於設置爲數據源的DataTable。結果datagridview1.Rows.RemoveAt(0);實際上間接Table1引用的對象中刪除行。

  • 你的變量(Table1Table2)指向同一個對象的兩個 - 所以每當有什麼事情發生到數據表(即行通過GridView的刪除),當您檢查變量要麼改變是可見的。

    Table2 = Table1; 
    

    分配對象既Table1Table2是指在DataTable Table1 = new DataTable();行創建DataTable後:

    下面的代碼時,你似乎期望完全克隆類似的int行爲進行「淺拷貝」。

    查看更多What is the difference between a deep copy and a shallow copy?

+0

我感謝你的幫助和評論。我正在研究這種複製方法。「淺和深複製」。 – Michealon

+1

深/淺拷貝並不是真正的核心問題。這涉及數據綁定。GridView確實創建了自己的行集合(深層複製)。 –

+0

你能解釋一下嗎?我的約束只是做分配。 那我怎麼綁定? – Michealon