Foxtable(狐表)用户栏目专家坐堂 → 利用内部函数新增一列,和DataRowAdded事件的先后顺序


  共有2455人关注过本帖树形打印复制链接

主题:利用内部函数新增一列,和DataRowAdded事件的先后顺序

帅哥哟,离线,有人找我吗?
qqibai
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
利用内部函数新增一列,和DataRowAdded事件的先后顺序  发帖心情 Post By:2017/2/16 11:57:00 [显示全部帖子]

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

 

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
qqibai
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
qqibai
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By:2017/2/27 18:54:00 [显示全部帖子]

老师,在DataRowAdded 事件加了e.DataRow.Save,内部函数不还是要在Added事件之后吗?那【编号】还是没能录进去啊。。

 回到顶部
帅哥哟,离线,有人找我吗?
qqibai
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
qqibai
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By:2017/2/28 11:47:00 [显示全部帖子]

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

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
qqibai
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By:2017/2/28 13:45:00 [显示全部帖子]

Addnew就直接得到Identify的值了,但是【编号】赋值是在内部函数,所以要等datarowadded事件完成之后才会有【编号】

但是datarowadded事件中又用到了【编号】,所以此时编号是空的

现在是在没办法,我就只能在datarowadded事件中给【编号】赋值,问题是内部函数里赋值时还包含了其他表数据行的【编号】赋值,单独在datarowadded里面再来一次显得代码更重复了


 回到顶部
帅哥哟,离线,有人找我吗?
qqibai
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:91 积分:960 威望:0 精华:0 注册:2015/12/7 14:07:00
  发帖心情 Post By:2017/2/28 16:04:00 [显示全部帖子]

以下是引用有点色在2017/2/28 15:03:00的发言:

在内部函数里面,AddNew以后,save一下,得到的就是最后的值啊

 

在DataRowAdded事件,可以写代码 e.DataRow.Save

 

也就是说,只要save之后,得到的就是最新的_Identify值

_Identify的值是最新的 即使不SAVE也不会是空值 但是【编号】是空的 因为是内部函数代码赋值的 在datarowadded事件之后才有值 但是datarowadded事件又要用到【编号】


 回到顶部