zoukankan      html  css  js  c++  java
  • Delphi Cxgrid中修改一个单元格,影响另一个单元格的值的实现方法

    第一种方法就是使用表格中列的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;
    

      

  • 相关阅读:
    磁盘缓存
    算法与追MM(转)
    人人都能上清华(转)
    软件加密技术和注册机制原理攻略(转)
    计算二重定积分
    C++运算符重载
    STL中list的用法
    累了??放松一下,看几张关于程序员的几张搞笑图片
    解决来QQ消息后歌曲音量降低问题
    搞ACM的你伤不起(转)
  • 原文地址:https://www.cnblogs.com/sdlz/p/13713185.html
Copyright © 2011-2022 走看看