2012-07-12 48 views
-2

可能重复:
Updating DataGridView using C#.Net的DataGridView不更新(使用C#Windows应用程序)

这是我尝试,但仍然没有更新。

con.Open(); 
SqlDataAdapter da = new SqlDataAdapter("Select * from Table_Name", con); 
DataTable dt = new DataTable(); 
da.Fill(dt); 
da.Update(dt); 
dataGridview1.DataSource = null; 
dataGridView1.DataSource = dt; 

此外,如果有任何更新与SQL查询DataGridView的方法.....

+0

你如何拒绝批准的编辑? – 2012-07-12 11:09:21

+0

我没有得到你? – Jain 2012-07-12 11:20:13

+0

@Jain忽略我的评论,它的mod材质。通常你将一个'DataGirdView'绑定到一个业务对象数据源,例如'List ()'。你可以把逻辑放在GIU中,但我不会推荐它。我们需要更多的信息 – 2012-07-12 12:43:58

回答

-2

试试下面的代码

con.Open(); 
SqlDataAdapter da = new SqlDataAdapter("Select * from Table_Name", con); 
Dataset ds = new Dataset(); //changed code from datatable to dataset 
da.Fill(ds); 
da.Update(ds); 
dataGridView1.DataSource = ds; 
dataGridView1.DataBind(); //databinding done here. this is missing in your code 
+1

我认为这是winform,所以'DataBind()'(反正它的一种方法而不是属性)在这里不适合大胆的假设 – V4Vendetta 2012-07-12 11:49:49

+0

-1。它不是'绑定'它的'更新'。 – 2012-07-12 12:47:17

+0

@jeremy汤普森。它不更新,它使用新的datatabel值将数据重新绑定到网格。 – HariHaran 2012-07-12 12:53:48

0

你需要调试你的代码,看是否当数据适配器尝试填充数据表时,DatTable实际上正在填充数据。

在这种情况下,您应该使用绑定源。这将确保您对Data Table所做的任何更改反映到DataGridView对象中。

你不需要调用Data Adapter上的Update(),只有Fill()就足够了。

Public BindingSource bs = new BindingSource(); 
Public DataTable dt = new DataTable(); 

SqlDataAdapter da = new SqlDataAdapter("Select * from Table_Name", con); 

Con.Open(); 

da.Fill(dt); 

Con.Close(); 

bs.DataSource = dt; 

dataGridview1.DataSource = bs; 

这样做可以过滤/查询内存中的DataTable,它将立即反映DataGridView中的更改。

如果您的查询可以在数据表中完成,那么查询数据库不是很好的做法。