以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]DataRowDeleted表事件  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=123951)

--  作者:沪上游客
--  发布时间:2018/8/27 18:47:00
--  [求助]DataRowDeleted表事件
老师您好!
我在DataRowDeleted表事件的代码如下:
Dim drs = e.DataRow
If e.DataRow("类别") = "借入" Or e.DataRow("类别") = "垫付资金" Then
    Dim jl As Decimal
    Dim zjdf As Decimal
    Dim dzsl As Decimal
    jl = DataTables("项目借款数据").Compute("Sum(金额)","主合同编号 = \'" & drs("主合同编号") & "\'And [类别] = \'借入\'")
    zjdf = DataTables("项目借款数据").Compute("Sum(金额)","主合同编号 = \'" & drs("主合同编号") & "\'And [类别] = \'垫付资金\'")
    dzsl = jl + zjdf
    DataTables("工程合同基础数据").SQLReplaceFor("项目资金借入数",dzsl,"合同编号 = \'" & drs("主合同编号") & "\'")
    DataTables("工程合同基础数据").SQLReplaceFor("项目资金借款余额","IsNull([项目资金借入数],0) - IsNull([项目资金还款数],0)","合同编号 = \'" & drs("主合同编号") & "\'",True)
    DataTables("工程合同基础数据").SQLReplaceFor("项目资金当前余额","IsNull([应收款收入数],0) + IsNull([项目资金借入数],0) - IsNull([建安发票开票数],0) - IsNull([项目资金还款数],0) - IsNull([支出合同应付款_已付数],0) - IsNull([工资支付数],0) - IsNull([其他成本支出数],0) - IsNull([税费报销支出],0) - IsNull([总部申报数],0) - IsNull([印花税_支出合同],0) - IsNull([印花税_固定资产],0) - IsNull([管理费汇总_合计],0) - IsNull([企业所得税_总部预交],0)","合同编号 = \'" & drs("主合同编号") & "\'",True)
End if

问题出在我删除刚刚新建的空行时,出现错误提示如下:

图片点击可在新窗口打开查看此主题相关图片如下:运行错误.png
图片点击可在新窗口打开查看

请教老师有什么办法?
另外请问老师Dim dr As DataRow 与 Dim dr = e.DataRow 有什么区别?
谢谢老师!
[此贴子已经被作者于2018/8/27 18:52:36编辑过]

--  作者:有点蓝
--  发布时间:2018/8/27 20:25:00
--  
1、正确的用法应该是


e.DataRow("金额") = 0

1楼的代码放到DataColChanged事件

2、Dim dr As DataRow表示定义了一个名称为dr的类型为DataRow的变量,这时dr是空值
Dim dr = e.DataRow表示定义了一个名称为dr的变量,并且把e.DataRow赋值给dr,这时dr等于e.DataRow

--  作者:沪上游客
--  发布时间:2018/8/28 9:29:00
--  
老师您好!
第2条,我明白了。
第1条我没有明白,我的目的是,如果在表里删除了记录后,就要重新计算一下其他表所有关联的数据(后台更新,这时记录已删除,数据发生了变化。指已保存过的)。现在如果我删除已经保存过的记录没有错误提示,而且数据更新也正确。但是如果我刚刚增加的记录删除时会出现以上错误提示。
DataRowDeleted事件是删除行后执行,此时行已经被删除,所以我的想法是如果在删除时重算,被删除的行还在会一起计算。
请教老师有没有好的办法?能否给一个例子?
非常感谢!
[此贴子已经被作者于2018/8/28 9:31:40编辑过]

--  作者:有点甜
--  发布时间:2018/8/28 9:57:00
--  

DataRowDeleting 事件记录变量,如

 

vars("值") = drs("主合同编号")

 

DataRowDeleted 事件,根据变量的值,写代码,如

 

jl = DataTables("项目借款数据").Compute("Sum(金额)","主合同编号 = \'" & vars("值") & "\'And [类别] = \'借入\'")


--  作者:沪上游客
--  发布时间:2018/8/28 11:14:00
--  
老师您好!也就是说在DataRowDeleting 设置代码:
Dim drs = e.DataRow
vars("主合同编号") = drs("主合同编号")

而在DataRowDeleted 不用设置
Dim drs = e.DataRow

是吧?
谢谢老师!


--  作者:沪上游客
--  发布时间:2018/8/28 11:20:00
--  
老师没有解决,改过代码后,删除空行时还是错误提示。
图片点击可在新窗口打开查看

再帮我看看,谢谢老师!

--  作者:有点甜
--  发布时间:2018/8/28 11:21:00
--  
以下是引用沪上游客在2018/8/28 11:14:00的发言:

 
而在DataRowDeleted 不用设置
Dim drs = e.DataRow

是吧?
谢谢老师!

 

是的。e.datarow在datarowdeleted事件已经不存在了,无法直接使用的。


--  作者:沪上游客
--  发布时间:2018/8/28 13:45:00
--  
老师您好!
还是不行
是不是在DataRowDeleting 的代码
Dim drs = e.DataRow
vars("主合同编号") = drs("主合同编号")

换成:
Dim drs As DataRow
vars("主合同编号") = drs("主合同编号")

这样做对吗?

--  作者:沪上游客
--  发布时间:2018/8/28 13:59:00
--  
老师是不是DataRow 和 Row 的区别,因为新增的行没有保存,后台没有这条记录。
--  作者:有点甜
--  发布时间:2018/8/28 14:14:00
--  
以下是引用沪上游客在2018/8/28 13:59:00的发言:
老师是不是DataRow 和 Row 的区别,因为新增的行没有保存,后台没有这条记录。

 

1、不明白你什么意思,你想表达什么?

 

2、

 

Dim drs = e.DataRow
vars("主合同编号") = drs("主合同编号")