2010-10-26 95 views
1

我有datagridview的连接到我的数据库(访问)如何更新datagridview中的单元格?

,如果我留在任一单元格,然后更改值,看到该值被改变

但是当我使刷新我看到值回到原始值。

我怎么可以更新此细胞(无SQL查询)

我绑定数据集的DataGridView这样的:

dsView = new DataSet(); 
      adp = new OleDbDataAdapter("SELECT * FROM Items", Conn); 
      adp.Fill(dsView, "Items"); 
      this.dataGridView1.DataSource = dsView.Tables["Items"].DefaultView; 
      adp.Dispose(); 

拜托,我必须找到如何做到这一点.....

感谢提前

+0

您必须提供绑定的对象更好的细节以及您实际上在不去数据库的情况下尝试更新的内容。 – leppie 2010-10-26 10:51:55

回答

4

如果你的datagridview连接到数据库,你不想使用SQL,我可以假设它是绑定到数据源。如果您通过Visual Studio Designer执行此操作,则应该有TableAdapter(如果自动生成,可能称为YOURTABLENAMETableAdapter)和BindingSource(如果自动生成,可能称为YOURTABLENAMEBidingSource)。

要更新数据库,您必须调用BindingSource.EndEdit()然后TableAdapter.Update()。完成此操作后,您可以刷新数据。

编辑

现在您提供更好的信息,我可以给你一个更好的答案。 在我之前的回答中,我假定你已经用设计器创建了所有东西,因为你不想使用SQL来进行更新。显然我错了。

为了达到您的要求,您应该使用OleDbCommandBuilder类,只要给出SELECT命令,就会自动为您的表生成简单的编辑命令(插入/更新/删除)。

这里是使用你的代码的例子:

dsView = new DataSet(); 
adp = new OleDbDataAdapter("SELECT * FROM Items", Conn); 
OleDbCommandBuilder cb = new OleDbCommandBuilder(adp); 
adp.Fill(dsView, "Items"); 
this.dataGridView1.DataSource = dsView.Tables["Items"].DefaultView; 
//adp.Dispose(); You should dispose you adp only when it is not loger needed (eg: after performing the update) 

现在,你perfomed更改的数据后,你可以调用

adp.Update(dsView, "Items"); 
+0

我试试这个:dataGridView2.EndEdit(); dataGridView2.Update();但它不工作 – Gold 2010-10-26 11:22:34

+0

不,这是错误的。你必须使用绑定的对象。在你的代码的某个地方有分配dataGridView.DataSource = somethingBindingSource(可能在form.Designer.cs文件中),那就是你的BindingSource(调用EndEdit()的那个)。您还可以找到一个表格适配器来调用更新。你是如何执行datagrid和你Db之间的绑定的? – 2010-10-26 12:45:10

+0

我还是不明白,我更新我的问题 - 我如何处理数据库 – Gold 2010-10-26 19:01:33

相关问题