以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 跨表锁定 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=176416) |
||||
-- 作者:采菊东篱下 -- 发布时间:2022/4/12 17:14:00 -- 跨表锁定 我希望在仓库表的进仓数量列下拉窗口的本次录入数量中录入数量后,如果仓库账上单号、名称、规格与采购订单上的单号、名称、规格相同,两者数量相等时锁定采购订单行,我这样写无法锁定。 采购订单表的DataColChanged事件: Select Case e.DataCol.Name Case "勾选" If e.DataRow.Isnull("单号") = False And e.DataTable.SQLCompute("Sum(数量)","[单号] = \'" & e.DataRow("单号") & "\' And [名称] =\'" & e.DataRow("名称") & "\' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," =\'" & e.DataRow("规格") & "\'")) = DataTables("仓库账").SQLCompute("Sum(进仓数量)","[单号] = \'" & e.DataRow("单号") & "\' And [名称] =\'" & e.DataRow("名称") & "\' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," =\'" & e.DataRow("规格") & "\'")) Then e.DataRow("勾选") = True e.DataRow.Locked = True Else e.DataRow("勾选") = False e.DataRow.Locked = False End If End Select 另我也希望在仓库账删除进仓数量时,其他列的数据同步删除,这样写能实现删除了,但在仓库账的进仓数量下拉窗口录入本次录入数量时,其他列的数据没有同步录入,注识下面代码后才能同步录入其他列数据,如何解决上面两个问题。 Dim dr As DataRow = e.DataRow Select Case e.DataCol.name Case "进仓数量","进仓单价" If dr.IsNull("进仓数量") OrElse dr.IsNull("进仓单价") Then \'dr("名称") = Nothing \'dr("规格") = Nothing \'dr("计量单位") = Nothing \'dr("单号") = Nothing \'dr("进仓单价") = Nothing dr("进仓金额") = Nothing Else \'Dim ds As DataRow = DataTables("采购订单").SQLFind("[单号] =\'" & e.DataRow("单号") & "\' And [名称] =\'" & e.DataRow("名称") & "\' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," =\'" & e.DataRow("规格") & "\'") & "\'","",0) \'If ds IsNot Nothing Then \'dr("名称") = ds("名称") \'dr("规格") = ds("规格") \'dr("计量单位") = ds("计量单位") \'dr("单号") = ds("单号") \'dr("进仓单价") = ds("单价") dr("进仓金额") = dr("进仓数量") * dr("进仓单价") \'End If End If End Select
[此贴子已经被作者于2022/4/12 21:13:20编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2022/4/12 17:34:00 -- 1、代码放在采购订单表的DataColChanged事件,判断的是【Case "勾选"】勾选这个列的数据变化才会触发事件。 而仓库账表使用的是【Dim dts As List(Of DataRow) = DataTables("采购订单").SQLSelect("[单号] =\'" & e.DataRow("单号") & "\'")】。SQLSelect查询后台数据库的,查询结果和界面的主表没有任何关系,SQLSelect查询结果是无法触发任何事件的,改为Select 2、在删除的时候,已经把名称删除了,下面还使用名称进行查询,肯定是无法查询到任何数据的 If dr.IsNull("进仓数量") OrElse dr.IsNull("进仓单价") Then \'dr("名称") = Nothing 名称已经清空 \'dr("规格") = Nothing \'dr("计量单位") = Nothing \'dr("单号") = Nothing \'dr("进仓单价") = Nothing dr("进仓金额") = Nothing Else 下面还使用名称进行条件查询肯定是无法查询到任何数据的 \'Dim ds As DataRow = DataTables("采购订单").SQLFind("[单号] =\'" & e.DataRow("单号") & "\' And [名称] =\'" & e.DataRow("名称") & "\' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," =\'" & e.DataRow("规格") & "\'") & "\'","",0) \'If ds IsNot Nothing Then 自己考虑使用什么条件进行查询合适,或者不要清空名称和规格
|
||||
-- 作者:采菊东篱下 -- 发布时间:2022/4/12 18:01:00 -- 触发仓库账上的数据,判断单号、名称、规格相同,数量相等才锁定采购订单表上的行,一张订单上常有多个品种,现在要锁定的是品种一定要带上名称、规格,我就是不知如何实现跨表锁定。 |
||||
-- 作者:采菊东篱下 -- 发布时间:2022/4/12 18:10:00 -- 仓库账、采购订单表都会分页加载,所以用SQL查找,如果找不到相同单号、名称、规格的数据,采购订单表上的行都不打勾、不锁定,锁定的是采购订单上符合条件的行。 |
||||
-- 作者:有点蓝 -- 发布时间:2022/4/12 20:28:00 -- 如果要触发表事件,在表事件里处理,就必须操作已加载的数据。 如果是直接改后台数据的,需要重新加载,前台表格才能刷新
|
||||
-- 作者:采菊东篱下 -- 发布时间:2022/4/13 0:57:00 -- 已经可以同步更新了,但勾选和锁定还不行。 Dim dr As DataRow = e.DataRow Dim dss As List(Of DataRow) = DataTables("采购订单").SQLSelect("[单号] =\'" & e.DataRow("单号") & "\' And [名称] =\'" & e.DataRow("名称") & "\' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," =\'" & e.DataRow("规格") & "\'") & "\'") Select Case e.DataCol.name Case "进仓数量" If e.OldValue IsNot Nothing AndAlso e.NewValue Is Nothing Then dr("名称") = Nothing dr("规格") = Nothing dr("计量单位") = Nothing dr("单号") = Nothing dr("进仓单价") = Nothing Else For Each ds As DataRow In dss If ds IsNot Nothing Then dr("名称") = ds("名称") dr("规格") = ds("规格") dr("计量单位") = ds("计量单位") dr("单号") = ds("单号") dr("进仓单价") = ds("单价") End If Next End If End Select dr("进仓金额") = dr("进仓数量") * dr("进仓单价")
[此贴子已经被作者于2022/4/13 9:33:47编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2022/4/13 8:49:00 -- 勾选和锁定使用的是SQLSelect,更改数据后没有保存 |
||||
-- 作者:采菊东篱下 -- 发布时间:2022/4/13 9:39:00 -- Dim dts As List(Of DataRow) = DataTables("采购订单").SQLSelect("[单号] Is Not Null And [单号] =\'" & e.DataRow("单号") & "\'") For Each dt As DataRow In dts If dt IsNot Nothing Then If e.DataTable.Compute("Sum([进仓数量])","[单号] =\'" & e.DataRow("单号") & "\' And [名称] =\'" & e.DataRow("名称") & "\' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," =\'" & e.DataRow("规格") & "\'")) = _ DataTables("采购订单").Compute("Sum([数量])","[单号] =\'" & e.DataRow("单号") & "\'And [名称] =\'" & e.DataRow("名称") & "\' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," =\'" & e.DataRow("规格") & "\'")) Then dt("勾选") = True dt.Locked = True Else dt("勾选") = False dt.Locked = False End If End If dt.save Next DataTables("采购订单").Load() 能勾选了,但不能取消勾选
|
||||
-- 作者:采菊东篱下 -- 发布时间:2022/4/13 9:40:00 --
|
||||
-- 作者:有点蓝 -- 发布时间:2022/4/13 9:59:00 -- http://www.foxtable.com/webhelp/topics/2901.htm |