winform程序,为什么与数据库绑定的文本框内容并没有修改但HasChanges()==true?

expeditioner 2008-10-09 09:50:47
制作了一个winform数据录入窗口,
使用多个文本框绑定表中字段,
先使用TableAdapter.Fill()取一行数据填充,
在窗体closing事件中使用BindingSource.EndEdit()和DataSet.HasChanges()判断用户是否修改了数据,
而不论是否修改,只要调用BindingSource.EndEdit()方法,DataSet.HasChanges()就为true,
如果不调用BindingSource.EndEdit()方法,DataSet.HasChanges()为false,请问大家这是为什么?
我想应该只有在修改了文本框中的数据后,DataSet.HasChanges()才应该为true,
我想实现当关闭窗体时若数据被修改,提示用户保存的功能.先谢谢了.
...全文
206 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
expeditioner 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zhnzzy 的回复:]
AcceptChange()了没有
[/Quote]

已经AcceptChange()了.
expeditioner 2008-10-09
  • 打赏
  • 举报
回复
所有TextBox的数据源更新模式都被我设置为OnValidation,是不是这个原因,我再试试.
lee118 2008-10-09
  • 打赏
  • 举报
回复
TableAdapter.Fill();紧接着后边写
DataSet.AcceptChange();

expeditioner 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 paulin 的回复:]
引用 11 楼 expeditioner 的回复:
是不是还要设置什么属性?

不需要啊,在绑定前对数据集执行DataSet.AcceptChange()语句
然后绑定,画面关闭时进行判断
DataSet.GetChanges()
没有问题的
[/Quote]

先谢了.
你是说在
myNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.tableBindingSource, "myname", true));

这种代码之前使用DataSet.AcceptChange()吗?
paulin 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 expeditioner 的回复:]
是不是还要设置什么属性?
[/Quote]
不需要啊,在绑定前对数据集执行DataSet.AcceptChange()语句
然后绑定,画面关闭时进行判断
DataSet.GetChanges()
没有问题的
expeditioner 2008-10-09
  • 打赏
  • 举报
回复
是不是还要设置什么属性?
expeditioner 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lee118 的回复:]
用户修改之前
[/Quote]

我试了,无论是否修改, DataSet.GetChange() 为 null.
lee118 2008-10-09
  • 打赏
  • 举报
回复
用户修改之前
expeditioner 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lee118 的回复:]
数据绑定时DataSet.AcceptChange();


关闭时 判断 if(DataSet.GetChange() !=null)


[/Quote]

数据绑定时DataSet.AcceptChange();是什么时候使用这行代码?是在DataSet.GetChange()之前还是在用户修改
之前?
paulin 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lee118 的回复:]
数据绑定时DataSet.AcceptChange();


关闭时 判断 if(DataSet.GetChange() !=null)
[/Quote]
lee118 2008-10-09
  • 打赏
  • 举报
回复
数据绑定时DataSet.AcceptChange();


关闭时 判断 if(DataSet.GetChange() !=null)

warrior 2008-10-09
  • 打赏
  • 举报
回复
你这种方法应该是可行的,所以要看问题出在哪儿.
expeditioner 2008-10-09
  • 打赏
  • 举报
回复
先谢谢大家的提示.

那么如果希望在用户修改了文本框内容之后才认为是修改了,怎样实现,
我想在窗体关闭事件中判断数据是否被用户修改,若修改了则提示用户保存数据,
如果没有修改则不做任何处理直接关闭.
paulin 2008-10-09
  • 打赏
  • 举报
回复
你调用了BindingSource.EndEdit()方法说明对dataset进行了编辑,DataSet.HasChanges()就应该为true了吧...
warrior 2008-10-09
  • 打赏
  • 举报
回复
贴代码看看.
一游 2008-10-09
  • 打赏
  • 举报
回复
EndEdit 会将挂起的操作提交给基础数据,肯定他会改变啊
zhnzzy 2008-10-09
  • 打赏
  • 举报
回复
AcceptChange()了没有
expeditioner 2008-10-09
  • 打赏
  • 举报
回复
填充代码
this.mtTableAdapter.Fill(this.myDataSet.myTable, id);

窗体关闭中部分代码:

try
{
if (this.myDataSet.GetChanges()!=null)//总是为null



不知这些代码行吗.
paulin 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 expeditioner 的回复:]
引用 12 楼 paulin 的回复:
引用 11 楼 expeditioner 的回复:
是不是还要设置什么属性?

不需要啊,在绑定前对数据集执行DataSet.AcceptChange()语句
然后绑定,画面关闭时进行判断
DataSet.GetChanges()
没有问题的


先谢了.
你是说在

C# codemyNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.tableBindingSource, "myname", true));


这种代码之前使用DataSet.Acce…
[/Quote]
看你想要查看什么时候的变更了,在绑定后也可以..
那是我的习惯,不好意思可能误导你了-_-
你是判断的tableBindingSource.GetChanges()吗
能把你再完整的代码贴上来么

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧