用dbnavigator的修改改了dbgrid中数条记录其中某一纪录的一个字段,但此记录的最后一个字段值是根据前面的字段值计算获得,如何作相应的修改?
是在dbnavigator的相应事件中做,还是dbgrid,或是datasource呢?

解决方案 »

  1.   

    dataset的相应事件中修改,就是query或table事件中做
      

  2.   

    adoquery中有afteropen,afteredit,afterpost等事件,看你想在什么时候修改,就在那加代码。
      

  3.   

    可以在dbgrid.datasource.dataset的BeforePost中写,给该字段赋值
      

  4.   

    如果要看到即時修改,即變動Field1 通過設定好的計算規則Fiedld2 變動.要用Field1的事件OnValidate 和 OnChange 來處理.
      

  5.   

    如果 Field1 變動則 Field2變動,Field2 變動則Field1 變動,即Field1,Field2互相影響時代碼處理上如下:
    Field1Validate(sender: TField);
    var
      E: TFieldNotifyEvent;
    begin
      E:=DataSet.Field2.OnValidate;
      dataset.field2.onvalidate := nil;
      try
        Calc1;//處理Field1 的變動如 Field2.Value := ****;
      finally
       dataset.field2.onvalidate := E;
      end;
    end;Field2Validate(sender: TField);
    var
      E: TFieldNotifyEvent;
    begin
      E:=DataSet.Field1.OnValidate;
      dataset.field1.onvalidate := nil;
      try
        Calc2;//處理Field2 的變動如 Field1.Value := ****;
      finally
       dataset.field1.onvalidate := E;
      end;
    end;