以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- [原创]子表的删除行DataRowDeleted事件不能触发父表的DataColChanged事件的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=130148)
|
-- 作者:子剑
-- 发布时间:2019/1/14 16:48:00
-- [原创]子表的删除行DataRowDeleted事件不能触发父表的DataColChanged事件的问题
子表的删除行有两个事件:DataRowDeleting 和DataRowDeleted,在跟踪调试子表:订单明细表orderline删除行事件的过程中,发现DataRowDeleted事件中的代码不能触发父表:订单表orderlist的DataColChanged事件。但是,我把相同的事件代码放到子表的DataRowDeleting事件实验中,则可以触发父表的DataColChanged事件。请问这是什么原因? 是个系统BUG吗?
固然使用订单明细表的DataRowDeleting事件可以触发订单表的DataColChanged, 但是父表订单表中的总金额是个表达式,来自于订单明细表的金额求和。DataRowDeleting事件订单明细表一行之后,父表的总金额引用之后没有改变,没有扣除删掉的一行子表的金额数值。这就是使用DataRowDeleting事件的困难所在。
希望的效果是:订单明细子表的DataRowDeleted可以触发订单父表的DataColChanged事件,在DateColChanged事件中用MessageBox.Show跟踪调试的总金额数值是最新的(扣除掉删除 一行的子表的金额数值)。
|
-- 作者:子剑
-- 发布时间:2019/1/14 16:50:00
--
子表订单明细表:orderline的删除行事件代码如下:
父表时:订单表orderlist
Dim pr As DataRow = e.DataRow.GetParentRow("orderlist")
If pr IsNot Nothing Then
DataTables("orderlist").DataCols("需求总金额").RaiseDataColChanged(pr)
End If
|
-- 作者:子剑
-- 发布时间:2019/1/14 16:56:00
--
这是父表订单表: orderlist的DataColChanged代码。
用MessageBox.Show跟踪显示:需求总金额,
在订单明细表删除一行之后,需求总金额没有改变,没有扣除掉删掉的那一行的子表的金额。
If e.DataCol.Name = "PO总金额" Or e.DataCol.Name = "需求总金额" Then Dim dr As DataRow = e.DataRow MessageBox.Show("orderlist需求总金额 " & dr("需求总金额")) Dim amount As Double = 0 Dim xj,xc As Double Dim drs As List(of DataRow) drs = DataTables("orderline").Select("PO = \'" & e.DataRow("PO") & "\'" ) For Each r As DataRow In drs amount = amount + Math.Round(r("PO单价") * r("PO数量"),3) Next Dim xqzje As Double = Math.Round(amount,3) MessageBox.Show("amount" & amount)
xj = Math.Abs(xqzje-dr("PO总金额")) xc = xj / dr("PO总金额") If xj <=0.1 OrElse xc <0.001 OrElse xj = 0 Then dr("总金额核对") = "核对正常" Else dr("总金额核对") = "核对异常" End If
End If
|
-- 作者:子剑
-- 发布时间:2019/1/14 16:57:00
--
请版主和高手分析一下。
|
-- 作者:有点甜
-- 发布时间:2019/1/14 17:00:00
--
代码改成
DataTables("orderlist").DataCols("需求总金额").RaiseDataColChanged("关联列 = \'" & e.datarow("关联列") & "\'")
|
-- 作者:子剑
-- 发布时间:2019/1/14 17:49:00
--
已经改了,加入到子表的DataRowDeleted事件中,现在DataRowDeleted可以触发父表DataColChanged了,父母的总金额数据也是扣掉删除行的最新值,谢谢版主!
|
-- 作者:子剑
-- 发布时间:2019/1/15 17:13:00
--
以下是引用有点甜在2019/1/14 17:00:00的发言:
代码改成
DataTables("orderlist").DataCols("需求总金额").RaiseDataColChanged("关联列 = \'" & e.datarow("关联列") & "\'")
子表:订单明细表删除行的问题解决了,但是,我接下来把这段代码放到子表:订单明细表 增加行 DataRowAdded 事件中,又发生问题,就是父表:订单表,的总需求金额不是最新的数值,不能加入子表新增行的PO单价*PO数量的那一行值,缺少一行的金额值。请问,这又是什么问题啊?
DataTables("orderlist").DataCols("需求总金额").RaiseDataColChanged("PO = \'" & e.DataRow("PO") & "\'")
|
-- 作者:子剑
-- 发布时间:2019/1/15 17:18:00
--
此主题相关图片如下:三个金额.png
|
-- 作者:子剑
-- 发布时间:2019/1/15 17:19:00
--
对了,我在子表中订单明细表新增行是采用导入的方式导进一行的。平时订单录入员也是这样工作的。
|
-- 作者:有点甜
-- 发布时间:2019/1/15 17:20:00
--
你子表的datacolchanged事件,没有重置列?
DataTables("orderlist").DataCols("需求总金额").RaiseDataColChanged("PO = \'" & e.DataRow("PO") & "\'")
|