以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]DataRowDeleted表事件 (http://foxtable.com/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 问题出在我删除刚刚新建的空行时,出现错误提示如下: 请教老师有什么办法? 另外请问老师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("主合同编号")
|