以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- DataColChanged中的OldValue (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=155797) |
-- 作者:lhj1168 -- 发布时间:2020/9/27 9:29:00 -- DataColChanged中的OldValue 在学习表事件DataColChanged,下面的代码有个地方没搞懂:如果是新增一个产品,此时DataColChanged事件中,OldValue应该是空值,NewValue才是新增的产品名称,我理解,这里应该是用NewValue,然后到库存表中看新增的产品是否存在,如果用OldValue,相当于到库存表中看是否有产品ID为空值的记录。但下面代码中dr = DataTables("库存").Find("产品ID = \'" & e.OldValue & "\'")用的是oldValue,也能正常运行,为什么? 假定有个产品表和一个库存表,两个表都有产品编号、产品名称、产品规格3列,且没有建立关联。希望 ①产品表新增一个产品,库存表也增加此产品 ②产品表删除一个产品,库存表也删除此产品 ③在产品表正更改产品的编号、名称或规格后,库存表也同步修改 在产品表的DataColChanged事件中的代码如下: Select Case e.DataCol.Name Case "产品ID" \'刚编辑的列是产品ID Dim dr As DataRow \'到库存表中查找,看是否存在刚编辑列的产品ID(旧值),为什么要取旧值,而不取新值?? dr = DataTables("库存").Find("产品ID = \'" & e.OldValue & "\'") If dr Is Nothing \'如果不存在,说明需要将产品表中的产品ID,产品名称,产品规格添加到库存表 dr = DataTables("库存").AddNew() \'在库存表中新增一行 dr("产品ID") = e.DataRow("产品ID") dr("产品名称") = e.DataRow("产品名称") dr("产品规格") = e.DataRow("产品规格") Else \'如果库存表中存在产品表中编辑的产品ID dr("产品ID") = e.DataRow("产品ID") End If Case "产品名称","产品规格" Dim dr As DataRow = DataTables("库存").Find("产品ID = \'" & e.DataRow("产品ID") & "\'") If dr IsNot Nothing dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name) End If End Select [此贴子已经被作者于2020/9/27 9:32:50编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/9/27 9:50:00 -- 假设是新增的,OldValue确实是空值,但是库存中肯定也还没有这个产品,所以不管使用什么条件查,查询结果肯定是不存在的。 |
-- 作者:lhj1168 -- 发布时间:2020/9/27 10:45:00 -- 明白了,谢谢! |