以文本方式查看主题 - 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 \'是新增 DataTables("商户台账").Save() Return Nothing
DatarowAdded
e.DataRow.Save |
-- 作者:有点蓝 -- 发布时间:2017/2/28 9:07:00 -- 测试没有问题。你可以加上提示框看看保存前后的值
DatarowAdded
msgbox("保存前=" & e.DataRow("_Identify")) e.DataRow.Save msgbox("保存后=" & e.DataRow("_Identify")) 内部函数 If Args(22) = "新增" Then \'是新增 msgbox(adn("_Identify")) ...... |
-- 作者:有点色 -- 发布时间:2017/2/28 9:16:00 -- 如果用 _Identify 做关联,你就必须先save一下,再使用。
不过不建议直接用_Identify做关联,还不如单独做一个编号列。 |
-- 作者:qqibai -- 发布时间:2017/2/28 11:47:00 -- 老师,用_Identify是没问题,因为addnew的时候就生成了主键,但是我是用单独编号列来关联的,编号列虽然等于_Identify,但是是后生成的。 主要考虑到多人同时编辑的问题所以编号设置为和_Identify一样了,单独生成编号的我也有做,但是前者更方便管理。
测试过了,编号列是在DatarowAdded事件触发后才生成的,所以都是空值,怎么处理比较好? |