2012-07-25 73 views
1

我試圖做一個DataGridView顯示來自SQL數據庫(GSM.sdf)的數據,並保存按鈕時按下DataGridView保存到數據庫的更改。數據顯示正常,但按下保存按鈕時沒有任何反應。我已經從這個主題下面頂端回答:將更改從DataGridView保存回SQL數據庫?

http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/98bc0b4d-a2ea-4b74-81f0-473da624528a

但它不工作了。這裏是我的代碼:

namespace WindowsFormsApplication5 
{ 
    public partial class Zeelot : Form 
    { 
     DataTable table = new DataTable(); 
     SqlCeDataAdapter z; 
     DataSet gSMDataSet = new DataSet(); 
     public Zeelot() 
     { 
      InitializeComponent(); 
     } 
     private void Zeelot_Load(object sender, EventArgs e) 
     { 
      string b = @"Data Source =.\SQLEXPRESS;database=GSM;Integrated Security=FALSE;Connection Timeout=30;User Instance=FALSE"; 
      SqlCeConnection conn = new SqlCeConnection(b); 
      conn.Open(); 
      string cd = "SELECT * FROM PhoneNumbers"; 
      z = new SqlCeDataAdapter(cd, conn); 
      z.Fill(gSMDataSet, "PhoneNumbers"); 
      table = gSMDataSet.Tables[0]; 
      conn.Close(); 
      dataGridView1.DataSource = table; 
     } 
     private void SaveButton_Click(object sender, EventArgs e) 
     { 
      SqlCeCommandBuilder local_SqlCommandBuilder = new SqlCeCommandBuilder(z); 
      local_SqlCommandBuilder.ConflictOption = System.Data.ConflictOption.OverwriteChanges; 
      z.UpdateCommand = local_SqlCommandBuilder.GetUpdateCommand(); 
      z.Update(((System.Data.DataTable)this.dataGridView1.DataSource)); 
      ((System.Data.DataTable)this.dataGridView1.DataSource).AcceptChanges(); 
     } 

    } 
} 

回答

1

我相信你的問題在於,你是鑄造一個DataSource到System.Data.DataTable

嘗試z.Update(gSMDataSet);

我也不相信你需要的AcceptChanges()

0
  1. 你不需要調用.AcceptChanges()在上月底的DataGridView。 的AcceptChanges()提交從DGV到所連接的數據源(您的DataTable)的變化

嘗試調用的AcceptChanges()嘗試提交更改到數據庫之前。

  1. 我認爲你的問題與你的連接。您手動創建並打開一個連接並將其分配給您的DataAdapter。但在_Load()方法中,關閉連接。由於_Click EventHandler中使用的DataAdapter與_Load()方法中使用的DataAdapter相同(因此使用相同的連接)。 由於您已關閉連接,因此無法對您的數據庫提交任何更改。

難道你在運行時得到任何異常嗎?

在嘗試將更改提交到數據庫之前,嘗試使用斷點檢查連接對象的當前狀態。

另外,如果您想在DataAdapter中使用它們,AFAIK MS建議不要手動創建連接。

DataAdapter的構造函數可以創建自己的連接

相關問題