判断数据集状态

tjj5203 2009-10-29 09:42:16
描述
有一DBGrid连接数据集,在退出或界面切换的时候如果数据改变了未保存则提示用户,我通过判断DBGrid.DataSource.DataSet.State in [dsEdit,dsInsert]。
问题
如果我直接在DBGrid中的某个字段的下拉选择项中选择,从而改变数据。
DBGrid.DataSource.DataSet.State in [dsEdit,dsInsert]返回false,大家教教我!
...全文
164 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjj5203 2009-10-29
  • 打赏
  • 举报
回复
我已经开缓存了啊!
风之谷 2009-10-29
  • 打赏
  • 举报
回复
按你这样说 看来只能开启缓存更新了
tjj5203 2009-10-29
  • 打赏
  • 举报
回复
但是,在下拉框选择后,焦点如果移动到其他地方后,这个时候状态就是dsEdit
tjj5203 2009-10-29
  • 打赏
  • 举报
回复
谢谢wooden954,很感谢你给我讲的这么详细,CSDN上的好人啊
我试了下,这个状态是dsBrowse。这样就不好处理了,哎
wooden954 2009-10-29
  • 打赏
  • 举报
回复
我猜楼主所说的情况“下拉选择项中选择,从而改变数据”这种状态可能是dsNewValue, dsOldValue, dsCurValue三者中的一个
wooden954 2009-10-29
  • 打赏
  • 举报
回复
你在这种情况下退出或切换界面前显示一下DataSet.State的值,
ShowMessage(Inttostr(Ord(DataSet.State)));
根据显示的值对比TDataSetState的定义,看他究竟处于什么状态,知道了这个状态,把这个状态再把状态定义加到你的判断代码中去即可。DBGrid.DataSource.DataSet.State in [dsEdit,dsInsert,新加入的状态值]。
其中 TDataSetState的定义如下:
type TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey, dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead, dsInternalCalc, dsOpening);
tjj5203 2009-10-29
  • 打赏
  • 举报
回复
顶个,别沉了
tjj5203 2009-10-29
  • 打赏
  • 举报
回复
to bdmh:
我最主要是想记录数据是否被编辑过或改变了
bdmh 2009-10-29
  • 打赏
  • 举报
回复

if ADOQuery1.Modified then
ADOQuery1.Post;
风之谷 2009-10-29
  • 打赏
  • 举报
回复
说明dataset已经post过了。DBGRID的数据光标移动都会引起post事件

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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