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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//编辑数量时发生
 
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方法实现,比如修改应出勤天数 或者 实际出勤天数 信息后重新计算薪资金额

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 @   lybingyu  阅读(849)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示