请问 dbgrid 中怎样实现修改鼠标选中的那一个字段值后  其他字段也跟着变化 

   包车费  实际付费  欠款
    200      150       50把付费的150改为200后  欠款自动变为0  谢谢............

解决方案 »

  1.   

    dbgrid 没有onchange事件啊!!!  dateset??
      

  2.   

    dbgrid是绑定dataset的,你在dataset中用计算字段,当然可以自己在fields中写计算方法。
      

  3.   

    晕~ 用SQL自身的触发器,怎么老想着在程序里搞...
      

  4.   

    建议你在每个字段的OnSetText事件中做,在adoquery中添加固定字段,或者动态绑定各个字段的OnSetText属性都可以
      

  5.   

    SQL自身的触发器 : 提交后才发生,然后客户端还要刷新该行记录才能回显。由数据库操作,多语言编程时,
    数据一致性好。TField::OnChange事件:字段内容发生改变时产生该事件,在里面写代码更改其他字段的值,字段值一改变,其他相关字段值马上会有变化,无须提交就可回显,用户接受程序高。不好的地方是该表所有涉及修改的界面都要注意这些地方,多个修改界面时,不小心的话,会产生数据不一致。计算字段:仅限于支持计算字段的语言,如delphi BCB. 而且对计算字段的排序,分组等也不好做。
    在不支持计算字段的语言中,用写SQL计算来实现。
      

  6.   

    1.可使用sql TRIGGER 來做一個update的TRIGGER,當付費有變化時,直接刷新database即可;
    2.靜態定義TField的OnChange事件,然後動態調用;(加減法而已)
      

  7.   

    var 
      s:pchar;
      Ret: LongInt;
      function gethand:integer;//获得句柄
       var
        Hands: HWND;
        poss:TPoint;
         begin
          GetCursorPos(Poss);
          Hands := WindowFromPoint(Poss);
          Result:=Hands;
         end;
    begin
           Ret := SendMessage(gethand, WM_GETTEXTLENGTH, 0, 0) + 1;
           getmem(s,Ret);
           SendMessage(gethand, WM_GETTEXT,ret,Integer(s));
           showmessage('得到的内容为'+S);
           //更新其他值为S
    end;
      

  8.   

    数据库里,应该设置 Calc 字段。在 OnCalc 里面写。