首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

CXGRID的单元格怎么实现自动计算

2013-09-18 
CXGRID的单元格如何实现自动计算?本帖最后由 u012151930 于 2013-09-17 01:14:23 编辑例如从SQL SERVER数

CXGRID的单元格如何实现自动计算?
本帖最后由 u012151930 于 2013-09-17 01:14:23 编辑 例如从SQL SERVER数据库查询得到两条记录并显示CXGRID中,如下:

商品   打折   金额
饼干           5.00
糖果           6.00

         合计金额:11.00
 

这是从数据库查询得到的结果并在CXGRID显示的两条记录,打折为空白的可编辑单元格,如果想给予顾客打折优惠,在打折字段输入打折数,金额字段如何自动计算打折后的金额?并在文本框中显示合计金额?

请问如何实现以上两个功能需要怎样设置CXGRID?我是初学者,请把实现代码详细写出来,谢谢了。



[解决办法]
你的cxgrid应该有: 单价, 数量, 折扣, 金额这几列;
如果是连着数据集的, 可以通过设定query计算列实现
也可以自己写公式计算金额;

//tv1: TcxGridBandedTableView;
procedure TForm1.tv1EditValueChanged(Sender: TcxCustomGridTableView;
  AItem: TcxCustomGridTableItem);
var
  dPrice, dQuantity, dCoupon : double;
begin
  tv1.DataController.Post();
  with tv1 do
  begin
    //金额计算   如果编辑单价, 数量, 优惠, 则计算消费金额
    if Controller.FocusedColumnIndex in [clmPrice.Index, clmQuantity.Index, clmCoupon.Index] then
    begin
      dPrice := DataController.Values[Controller.FocusedRecordIndex, clmPrice.index];
      dQuantity := DataController.Values[Controller.FocusedRecordIndex, clmQuantity.index];
      dCoupon := DataController.Values[Controller.FocusedRecordIndex, clmCoupon.index];

      DataController.Values[Controller.FocusedRecordIndex, clmTotal.index] :=
        dPrice * dCoupon / 10 * dQuantity;
    end;
  end;
end;


上边的代码没有做异常处理, lz可以设置列属性为货币型, 并对数值有效性做处理.

合计可以通过对金额列页脚求和实现
[解决办法]
tv1.DataController.Post();//提交数据, 因为在此事件中, 你编辑的数据并未存入控件

//如果编辑的是单价, 数量, 折扣时计算金额 clmPrice.Index, clmQuantity.Index, clmCoupon.Index 分别为对应列的下标 


if Controller.FocusedColumnIndex in [clmPrice.Index, clmQuantity.Index, clmCoupon.Index] then
[解决办法]
tv1.DataController.Post() 
DataController.Values[Controller.FocusedRecordIndex, clmTotal.index] 

这都是基础知识, 你看源码就能解答.

tv1.DataController.Post(); //参数为是否强制提交的选项, 因为有默认值, 括号可以省略
tv1.DataController.Post;  <==> tv1.DataController.Post();


DataController.Values[Controller.FocusedRecordIndex, clmTotal.index] 
获取当前单元格的数值

热点排行