2009-07-22 73 views
3

有没有人遇到ds.hasChanges()为假,尽管ds在断点处检查时明显发生了变化? 我一直在看它相当长的一段时间,我看不出有什么不对.......NET DataSet.HasChanges错误地为false

// connectionstring and command has been set 
DataSet ds = new DataSet(); 
BindingSource myBindingSource = new BindingSource(); 
SqlDataAdapter dataAdapter1 = new SqlDataAdapter(); 
dataAdapter1.Fill(ds, "Data"); 
myBindingSource.DataSource = ds.Tables["Data"]; 

// then changes made to the datatable on a windows form using bindingnavigator 
ds.HasChanges(DataRowState.Modified); // is false 

现在,当我与HasChanges行后设置一个断点,并使用数据集可视化工具,我可以看到DataSet实际上已经改变,但HasChanges仍然返回false。

我敢肯定我错过了明显的......任何人都可以看到我做错了什么?

干杯

+0

对数据表进行了哪些更改 - 即确实更新了行,未添加? 另外,dt.Tables [“Data”]。HasChanges是否返回true? – AdaTheDev 2009-07-22 14:03:19

回答

8

先尝试调用的BindingContext的EndCurrentEdit():

DataTable dt = ds.Tables["Data"]; 
this.BindingContext[dt].EndCurrentEdit(); 

if(ds.HasChanges(DataRowState.Modified)) 
{ 
    // do your stuff here 
} 

也可以尝试调用myBindingSource.EndEdit()将任何未COMMITED数据推到DataTable

0

Windows窗体是不是做对DataSet中的.AcceptChanges()调用是什么呢?

编辑: 好的不是这样。接下来的事情,根据我的评论:
1)有记录def被修改,不只是添加/删除? DataSet.HasChanges()返回什么?
2)GetChanges()为数据集中的特定数据集返回什么?

+0

编号这是我的第一个想法... – 2009-07-22 14:07:54

+0

1.记录已更新没有删除或添加 2.返回false 3.没有hasChanges为数据表,但如果您的意思是getchanges返回null以及 – 2009-07-22 14:14:56