描述
有一DBGrid连接数据集,在退出或界面切换的时候如果数据改变了未保存则提示用户,我通过判断DBGrid.DataSource.DataSet.State in [dsEdit,dsInsert]。
问题
如果我直接在DBGrid中的某个字段的下拉选择项中选择,从而改变数据。
DBGrid.DataSource.DataSet.State in [dsEdit,dsInsert]返回false,大家教教我!

解决方案 »

  1.   

    说明dataset已经post过了。DBGRID的数据光标移动都会引起post事件
      

  2.   


      if ADOQuery1.Modified then
        ADOQuery1.Post;
      

  3.   

    to bdmh:
    我最主要是想记录数据是否被编辑过或改变了
      

  4.   

    你在这种情况下退出或切换界面前显示一下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);
      

  5.   

    我猜楼主所说的情况“下拉选择项中选择,从而改变数据”这种状态可能是dsNewValue, dsOldValue, dsCurValue三者中的一个
      

  6.   

    谢谢wooden954,很感谢你给我讲的这么详细,CSDN上的好人啊
    我试了下,这个状态是dsBrowse。这样就不好处理了,哎
      

  7.   

    但是,在下拉框选择后,焦点如果移动到其他地方后,这个时候状态就是dsEdit