.NET DataSet.HasChanges错误地为false

有没有人遇到ds.hasChanges()是假的,尽管ds在断点检查时显然有变化? 我已经看了很长一段时间,我看不出有什么问题……

// 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 Visualizer时,我可以看到DataSet实际上已经改变,但HasChanges仍然返回false。

我敢肯定我错过了那个显而易见的……有人能看出我做错了什么吗?

干杯

首先尝试在BindingContext上调用EndCurrentEdit():

 DataTable dt = ds.Tables["Data"]; this.BindingContext[dt].EndCurrentEdit(); if(ds.HasChanges(DataRowState.Modified)) { // do your stuff here } 

还可以尝试调用myBindingSource.EndEdit() ,将任何未提交的DataTable推送到DataTable

Windows Form没有对DataSet进行.AcceptChanges()调用吗?

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