第一种方法就是使用表格中列的PropertiesValidate方法实现,例如修改单据的数量列,希望重新计算当前行的金额列
//编辑数量时发生 procedure TfrmSkdLr.cxgrdbclmnTV_SlPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var fValue: Double; begin 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; 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;