以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  利用内部函数新增一列,和DataRowAdded事件的先后顺序  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=96251)

--  作者:qqibai
--  发布时间:2017/2/16 11:57:00
--  利用内部函数新增一列,和DataRowAdded事件的先后顺序

在窗口中利用内部函数在表A新增一列,新增时,【编号】=【_Identify】,代码最后加了datatables(表A).save()

 

然后在表A的表属性DataRowAdded事件中加了另一段代码,用于在表B中记录表A的数据新增记录,表A中新增一条数据,表B中便新增一条该数据的新增记录,包括【编号】、【时间】、【操作员】,代码中有一段是datatables(表B).【编号】=datatables(表A).【编号】,并做了关联,关联列为【编号】,结果发现表B的编号列都为空

 

在表A的表属性DataRowAdded中加msgbox测试了下,【编号】列是空值,不太理解为什么。DataRowAdded上的解释明明是此时datarow已经真正增加到datatable中了,而且我还特意加了save,为什么这时候读取表A的【编号】列还是空值?


--  作者:有点色
--  发布时间:2017/2/16 12:49:00
--  

代码执行完AddNew事件,就会触发DataRowAdded事件,执行完事件,才会回来继续内部函数的代码

 

建议在事件执行 e.DataRow.Save


--  作者:qqibai
--  发布时间:2017/2/16 14:22:00
--  
以下是引用有点色在2017/2/16 12:49:00的发言:

代码执行完AddNew事件,就会触发DataRowAdded事件,执行完事件,才会回来继续内部函数的代码

 

建议在事件执行 e.DataRow.Save

老师,在哪里加e.DataRow.Save?

[此贴子已经被作者于2017/2/16 14:34:07编辑过]

--  作者:有点蓝
--  发布时间:2017/2/16 15:42:00
--  
DataRowAdded事件
--  作者:qqibai
--  发布时间:2017/2/27 18:54:00
--  
老师,在DataRowAdded 事件加了e.DataRow.Save,内部函数不还是要在Added事件之后吗?那【编号】还是没能录进去啊。。
--  作者:有点蓝
--  发布时间:2017/2/27 20:21:00
--  
DataRowAdded 事件和函数的代码贴出来
--  作者:qqibai
--  发布时间:2017/2/28 8:51:00
--  

内部函数

If Args(22) = "新增" Then \'是新增
    Dim adn As Row = Tables("商户台账").addnew()
    adn("编号") = adn("_Identify")
    adn("商户名称") = Args(2)
    adn("注册地址") = Args(3)
    adn("营业执照号") = Args(4)
    adn("税务登记证") = Args(5)
    adn("商户负责人") = Args(6)
    adn("身份证号码") = Args(7)
    adn("手机号码") = Args(8)
    adn("工号") = Args(9)
    adn("入账户名") = Args(10)
    adn("绑定账号") = Args(11)
    adn("客户号") = Args(12)
    adn("借记卡限额") = Args(13)
    adn("信用卡限额") = Args(14)
    adn("商户类型") = Args(18)
    adn("客户经理") = Args(20)
    adn("部门") = Args(21)
    Dim adn1 As Row = Tables("终端台账").addnew()
    adn1("编号") = adn("编号")
    adn1("绑定电话") = Args(15)
    adn1("装机地址") = Args(17)
    adn1("使用距离") = Args(16)
    If Args(19) = True Then
        adn1("机具类型") = "固定"
    Else adn1("机具类型") = "移动"
    End If
   
Else \'存量
    Dim adn1 As Row = Tables("终端台账").addnew()
    Dim fdr As DataRow = DataTables("商户台账").Find("商户编码 = \'" & Args(1) & "\'")
    adn1("编号") = fdr("编号")
    adn1("绑定电话") = Args(15)
    adn1("装机地址") = Args(17)
    adn1("使用距离") = Args(16)
    If Args(19) = True Then
        adn1("机具类型") = "固定"
    Else adn1("机具类型") = "移动"
    End If   
End If

DataTables("商户台账").Save()
DataTables("终端台账").Save()

Return Nothing

 

DatarowAdded

 

e.DataRow.Save
Dim r As DataRow = e.DataRow
Dim nc As DataRow = DataTables("变更台账").addnew() \'增加新增记录
nc("编号") = r("编号")
nc("变更日期") = Now
nc("变更内容") = "商户录入"
nc("变更人") = User.Name


--  作者:有点蓝
--  发布时间:2017/2/28 9:07:00
--  

测试没有问题。你可以加上提示框看看保存前后的值

 

DatarowAdded

 

msgbox("保存前=" & e.DataRow("_Identify"))

e.DataRow.Save

msgbox("保存后=" & e.DataRow("_Identify"))

内部函数

If Args(22) = "新增" Then \'是新增
    Dim adn As Row = Tables("商户台账").addnew()

msgbox(adn("_Identify"))
    adn("编号") = adn("_Identify")

......


--  作者:有点色
--  发布时间:2017/2/28 9:16:00
--  

 如果用 _Identify 做关联,你就必须先save一下,再使用。

 

 不过不建议直接用_Identify做关联,还不如单独做一个编号列。


--  作者:qqibai
--  发布时间:2017/2/28 11:47:00
--  

老师,用_Identify是没问题,因为addnew的时候就生成了主键,但是我是用单独编号列来关联的,编号列虽然等于_Identify,但是是后生成的。

主要考虑到多人同时编辑的问题所以编号设置为和_Identify一样了,单独生成编号的我也有做,但是前者更方便管理。

 

测试过了,编号列是在DatarowAdded事件触发后才生成的,所以都是空值,怎么处理比较好?