2010-10-03 65 views
1

這爲什麼我的DataGridView沒有更新的變化是我的代碼:底層的DataTable

private void button1_Click(object sender, EventArgs e) 
    { 
     DataTable table = new DataTable(); 
     using (SqlCeDataAdapter sqlCeDataAdapter = new SqlCeDataAdapter("SELECT * FROM test", sqlCeConnection)) 
     { 
      sqlCeDataAdapter.Fill(table); 
     } 
     dataGridView1.DataSource = table; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show(((DataTable)dataGridView1.DataSource).Rows.Count.ToString()); 
    } 

我想要做的就是更新底層數據庫,但根據this教程,底層DataTable會每當我編輯行時,都需要反映對DataGridView所做的更改。我在做的只是運行應用程序,按button1,然後刪除DataGridView中的一些行,然後按button2查看我得到的行數。在此應用程序中,我獲得的行數與刪除行之前的行數相同,但是如果將dataGridView1DataSource替換爲我自己填充的DataTable(通過調用DataTable.NewRow()等),每次刪除時都會反映在DataTable上一行(底層DataTable包含更少的行後刪除其中的一些)。

回答

3

即使您將它與您所指的文章進行比較,您的代碼似乎仍然不完整。

在文章本身,它是BindingSource,它用於實現您試圖實現的功能。請參閱該文章中使用的以下代碼。

//BindingSource to sync DataTable and DataGridView 
BindingSource bSource = new BindingSource(); 

既然你似乎正在學習這個,我不會給你確切的代碼,但指向大方向。

瞭解如何在示例教程中使用上述對象。這應該可以幫助你模擬類似於你正在尋找的行爲。

此外,還有一點提示,一旦您將網格綁定到數據源後進行了一些更改,您必須將數據源告知更新本身。這也在本教程的示例代碼中介紹。

希望這有助於!我還建議您閱讀與BindingSourceDataAdapter相關的MSDN,因爲您需要結合使用這兩個功能才能按照您的需要正常工作。