2013-03-25 72 views
0

我搜索了一些帖子,但仍无法获得它的工作。在运行时编辑datagridview并更新数据库

我用C#编写的窗口应用程序,在这里,我在DataGridView绑定到我的数据库:

public static DataSet GetDataSet(string sql) 
    { 
     using (SqlConnection cn = new SqlConnection(constr)) 
     { 
      SqlDataAdapter da = new SqlDataAdapter(sql, cn); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      return ds; 

     } 
    } 

,我绑定在另一大类的datagridview:

string sql = "select Amount, Price, Description from myTable"; 
ds = DbHelper.GetDataSet(sql); 
dataGridView2.DataSource = ds.Tables[0]; 

我创建了一个按钮用户在编辑datagridview后更新数据库:

string sql = "select Amount, Price, Description from myTable"; 
DbHelper.UpdateDataSet(sql, ds); 
MessageBox.Show("done"); 

public static void UpdateDataSet(string sql, DataSet ds) 
    { 
     using (SqlConnection cn = new SqlConnection(constr)) 
     { 
      SqlDataAdapter da = new SqlDataAdapter(sql, cn); 
      da.Update(ds); 
     } 
    } 

这是erro r,发生在线da.Update(ds);

当使用修改的行传递DataRow集合时,更新需要有效的UpdateCommand。

感谢您的帮助。

编辑 我可以得到它与这方面的工作:

SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da); 
da.UpdateCommand = commandBuilder.GetUpdateCommand(); 

但只有当我告诉在DataGridView主要为好,否则:

动态SQL生成的更新命令不支持不会返回任何关键列信息的SelectCommand。

如何克服这一点,如果我不想显示在datagridview中的关键?

+0

你如何期望用'SELECT'语句更新数据库? – 2013-03-25 06:13:41

回答

0

SqlCommandBuilder需要主键来更新该字段。您仍然可以将密钥加载到DataGridView,但是隐藏列。

+0

它的工作原理。感谢您的提示 – AkariKamigishi 2013-03-25 06:45:02

相关问题