Foxtable(狐表)用户栏目专家坐堂 → DataColChanged中的OldValue


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

主题:DataColChanged中的OldValue

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


加好友 发短信
等级:婴狐 帖子:7 积分:130 威望:0 精华:0 注册:2020/7/24 20:45:00
DataColChanged中的OldValue  发帖心情 Post By:2020/9/27 9:29:00 [只看该作者]

在学习表事件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编辑过]

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


加好友 发短信
等级:超级版主 帖子:110494 积分:562348 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/9/27 9:50:00 [只看该作者]

假设是新增的,OldValue确实是空值,但是库存中肯定也还没有这个产品,所以不管使用什么条件查,查询结果肯定是不存在的。

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


加好友 发短信
等级:婴狐 帖子:7 积分:130 威望:0 精华:0 注册:2020/7/24 20:45:00
  发帖心情 Post By:2020/9/27 10:45:00 [只看该作者]

明白了,谢谢!

 回到顶部