2012-07-25 41 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的构造函数可以创建自己的连接

相关问题