Delphi Cxgrid中修改一个单元格,影响另一个单元格的值的实现方法

第一种方法就是使用表格中列的PropertiesValidate方法实现,例如修改单据的数量列,希望重新计算当前行的金额列

//编辑数量时发生

procedure TfrmSkdLr.cxgrdbclmnTV_SlPropertiesValidate(Sender: TObject;
  var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
var
  fValue: Double;
  AHandler: TcxEditValidateEvent;
begin
  AHandler := TcxTextEdit(Sender).Properties.OnValidate;
  TcxTextEdit(Sender).Properties.OnValidate := nil;
  try  
    try
      fValue := DisplayValue;
      msqry_Mx.Edit;
      msqry_Mx.FieldByName('Jk_Sl').AsFloat := MyRound(fValue, Sys_Slxsw);
      CalculateRecord(1);  //行重新计算的方法
      msqry_Mx.Post;
    except
      DisplayValue := msqry_Mx.FieldByName('Jk_Sl').AsFloat;
    end;
  finally
    TcxTextEdit(Sender).Properties.OnValidate := AHandler;
  end;
end;

  

第二种方法是使用TableView的EditValueChanged方法实现,比如修改应出勤天数 或者 实际出勤天数 信息后重新计算薪资金额

procedure Tfrm_Xscqwh.cxTV2EditValueChanged(Sender: TcxCustomGridTableView;
  AItem: TcxCustomGridTableItem);
var
  sItemName, sFieldName: string;
begin
  sItemName := AItem.Name; //取得正在编辑列的名称
  if (sItemName = 'cxgrdbclmn_Ycq') or (sItemName = 'cxgrdbclmn_Sjcq') then //判断是否编辑了需要重新计算的列
  begin
    sFieldName := TcxGridDBColumn(AItem).DataBinding.FieldName; //取得正在编辑列绑定的数据字段名称
    //将正在编辑单元格的值EditingValue写到数据集对应字段中
    msqry_Mx.Edit;
    msqry_Mx.FieldByName(sFieldName).Value := cxTV2.Controller.EditingController.Edit.EditingValue;
    RecalculMoney; //调用行重新计算本行其他列值的方法
  end;
end;

  

 

posted @ 2020-09-22 16:52  lybingyu  阅读(729)  评论(0编辑  收藏  举报