关于DBGRID字段间联动的问题(50分)

  • 主题发起人 主题发起人 dawn06
  • 开始时间 开始时间
D

dawn06

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DBGRIDEH显示编辑一表,表中有3个字段 Price、Quantity、Sum,这3个字段的关系是Sum = Price * Quantity。 <br>由于grid没有Cell的Onchange事件,用哪种方法做联动比较好。我现在是在Grid上覆盖了一个编辑控件,通过编辑控件的Onchange来实现不过总不是很舒服,不知道有没有更好的办法。我的全部分数都在这里了。
 
纠正一下思路:应该在数据集上建立计算字段 sum 使 Sum = Price * Quantity。然后用 DBGrideh 显示。
 
楼上好办法。<br>create table test (<br>[Base] [float] NULL ,<br>[Reduce] [float] NULL, &nbsp; &nbsp;<br>[Tax] AS (([Base] - [Reduce]) * [Rate] / 100 - [Deduct]) )
 
回二楼,我是用DBGRIDEH来显示的,又用了个ClinetDataSourse,字段是在ClinetDataSourse上的
 
表字段设计好了,和用什么控件没关系吧。
 
字段是在ClinetDataSourse上的?应该是 ClientDataSet 吧,你本来可以直接在 ClientDataSet 建立计算字段。你查看一下 sum 是不是计算字段,如果不是,可以将它删除,重新建立 sum 计算字段,然后在 ClientDataSet 的 OnCalcFields 事件中填写:Sum = Price * Quantity
 
分别在 Price 及 Quantity字段的OnValidate事件里<br>都写上Sum = Price * Quantity就行啦。。。
 
在数据集上进行计算吧 ...
 
同意kaida,我一直是这么做的。
 
在 TDataSource 里的 OnDataChanged 事件里定义.<br>if TDataSource(Sender).DataSet.State in [dsEdit, dsInsert] then<br>&nbsp; if Field &lt;&gt; nil then<br>&nbsp; &nbsp; if Field.Name = 'Price' or Field.Name = 'Quantity' then<br>&nbsp; &nbsp; &nbsp; TDataSource(Sender).DataSet.FieldByName('Sum').AsCurrency := &nbsp;TDataSource(Sender).DataSet.FieldByName('Price' ).AsCurrency * TDataSource(Sender).DataSet.FieldByName('Quantity' ).AsCurrency
 
多人接受答案了。
 
后退
顶部