有个dbgrid1连接表table1,大致如下:   
    姓名                     语文(yw)     数学(sx)           总分(zf)   
    张三                     80                 90                       170   
    李四                     90                 70                       160   
  ------------------------------------------------   
  现在的问题是这个表在dbgrid中编辑,当输入完yw,sx后怎样实现自动计算总分(zf)呢?   
    
  先谢谢了 

解决方案 »

  1.   

    比方说你的Grid的DataSource绑定到ADOQuery1上,在ADOQuery1的AfterPost事件中计算:procedure TForm1.ADOQuery1AfterPost(DataSet: TDataSet);
    var
      gSum: Double;
    begin
      with DataSet do
      try
        //清空AfterPost事件,避免出现AfterPost无限递规
        AfterPost := nil;
        //开始计算
        gSum := FieldByName('yw').AsFloat + FieldByName('SX').AsFloat;
        //比较总分是否变化,变了就保存
        if Abs(gSum - FieldByName('yw').AsFloat) < 0.0001 then
        begin
          Edit;
          FieldByName('yw').AsFloat := gSum;
          Post;
        end;
      finally
        AfterPost := ADOQuery1AfterPost
      end;
    end;
      

  2.   

    另外当yw,sx字段要做成静态字段(ADOQuery1YW,ADOQuery1SX)的SetText事件也要写点代码:
    procedure TForm1.ADOQuery1YWSetText(Sender: TField; const Text: String);
    begin
      Sender.AsString := Text;
      Sender.DataSet.Post;//触发实时计算
    end;
    其实把计算写到这也可以