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

DBgrid中的3列有计算关系,要求实时显示结果,怎么写代码实现

2012-02-23 
DBgrid中的3列有计算关系,要求实时显示结果,如何写代码实现?我的DBGRID现有3列有计算关系:A*BC,我想在A或

DBgrid中的3列有计算关系,要求实时显示结果,如何写代码实现?
我的DBGRID现有3列有计算关系:A*B=C,我想在A或B内输入时自动计算显示C,在C输入时又能自动计算显示A
现在我在DataSet的字段A和C的onchange()中写了计算代码,但是会引起循环计算;
如果写在dataset的onbeforepost()中也不行,因为用户要求实时显示,不能最后计算。


如何实现好呢?


[解决办法]
写在DBGrid1KeyPress事件中,先判断当前输入是哪一列,然后进行相应计算
[解决办法]
判断一下就行了,要是输入 A B列就按 A*B计算,要是输入C A 或B 就按 c/A 或B算,就这样,你可以这样判断 ,只要列的数据不为空时才会计算
[解决办法]
A会改变C,C又会改变A; 沒有控制条件不论怎么写都会循环,设计本身就有问题?

例1*2=2; C=2时改变A=2 那么2*2=4; 即C=4,C变了是不是A又要改变呢,无限下去...
[解决办法]
如果是用AOD的话就用onFieldChangeComplete事件:判断一下被修改的是哪个字段,如果是所指定的字段就修改其它关联字段就可以了。
[解决办法]
dataset.FieldbyName('A').OnValidate := datasetAValidate;
dataset.FieldbyName('B').OnValidate := datasetAValidate;
dataset.FieldbyName('C').OnValidate := datasetCValidate;


在show的事件里面写名类似这样的代码。tb_datasetAValidate这是一个过程,在过程里面可以写C栏位的计算方式,但是在这个里面要先把dataset.FieldbyName('C').OnValidate := nil,最后再加上dataset.FieldbyName('C').OnValidate := datasetCValidate;
以免造成循环,在datasetCValidate里面就写A栏的计算方式,同样要把A的dataset.FieldbyName('A').OnValidate :=nil,最后再加上dataset.FieldbyName('A').OnValidate := datasetAValidate;
不知道我这样写你是否看得明白。。。

热点排行