代码之家  ›  专栏  ›  技术社区  ›  G Berdal

.NET DataSet.HasChanges错误地为false

  •  3
  • G Berdal  · 技术社区  · 17 年前

    是否有人发现ds.hasChanges()为false,尽管您在断点处检查ds时,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时,我可以看到数据集实际上已经更改,但HasChanges仍然返回false。

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

    干杯

    2 回复  |  直到 17 年前
        1
  •  9
  •   Vivek    17 年前

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

    也可以试着打电话给 myBindingSource.EndEdit() 这将把任何未提交的数据推送到 DataTable

        2
  •  0
  •   AdaTheDev    17 年前

    Windows窗体没有对数据集执行.AcceptChanges()调用,是吗?

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

    推荐文章