比如说我dbgrid中有三列:数量、单价、金额,请问dbgrid能否实现这样的功能,修改了数量或单价后金额自动计算,还有另一种情况:dbgrid中有客户编码、客户名称,这都来自客户档案,我修改了客户编码后,客户名称也自动刷新,不知道dbgrid能不能实现,如果能请提示一下,谢谢

解决方案 »

  1.   

    dbgrid连到数据集 对相应字段 写它的Change事件就可以了
      

  2.   

    例如下面的dbgrid连到数据集   当dbgrid中字段 DetailKJZMX_KJBH 改变时,WJXX_KJMC等等其他字段也自动改变procedure TFrm_KM_DCWJ_KJZ.AdoQry_DetailKJZMX_KJBHChange(Sender: TField);
    begin
      inherited;
      with TADOQuery.Create(Self) do
      begin
        Connection := Self.DBConnect;
        try
        SQL.Add('select * ');
        SQL.Add('from WJXX ');
        SQL.Add('where WJXX_KJBH=:pKJBH');
        SQL.Add('  and isnull(WJXX_TYBZ,''N'')<>''Y'' ');
        Parameters.ParamByName('pKJBH').Value := AdoQry_DetailKJZMX_KJBH.AsFloat;
        Open;
        if not IsEmpty then
        begin
          AdoQry_DetailWJXX_KJMC.AsString := FieldByName('WJXX_KJMC').AsString;
          AdoQry_DetailWJXX_KJLX.AsString := FieldByName('WJXX_KJLX').AsString;
          AdoQry_DetailWJXX_KJXX.AsString := FieldByName('WJXX_KJXX').AsString;
          AdoQry_DetailWJXX_KJMJ.AsString := FieldByName('WJXX_KJMJ').AsString;
          AdoQry_DetailWJXX_SXZD.AsString := FieldByName('WJXX_SXZD').AsString;
        end;
      finally
        Close;
        Free;
      end;
      end;
    end;
      

  3.   

    我回答另一个问题
    dbgrid中有客户编码、客户名称,这都来自客户档案,我修改了客户编码后,客户名称也自动刷新,不知道dbgrid能不能实现客户名称字段用Lookup类型就可以自动更改
      

  4.   

    一.用计算字段
    二.用query1.refresh;
      

  5.   

    在adoquery组件的afteredit中计算
      

  6.   

    下午查了些资料,关于计算的问题在adoquery的oncalcfields事件中好像就可以处理了,第二个问题还在研究中,
    大家多提宝贵意见,谢谢
      

  7.   

    我遇到的第二个问题比我上面说的复杂一些,bdgrid中有a、b、c三列,都来自另一档案,而且都是唯一的,
    如果改变a,则b、c也跟着改变,同样改变b或c,另两个也改变,这种情况lookup是不是就不大适合了?