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]
获取当前单元格的数值