以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  每次打开某表都会重置关键列  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177346)

--  作者:有点灰2
--  发布时间:2022/5/18 16:38:00
--  每次打开某表都会重置关键列



图片点击可在新窗口打开查看此主题相关图片如下:14.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:58.png
图片点击可在新窗口打开查看
有两个问题:1是我在生产计划管理系统中设置了判定列,当判定选折true 后会将对号数据复制到库房管理系统中,如果现在判定选项误判断了,有TRUE 变成False  怎么能够把已经复制过的数据再重新撤回呢

 

 

2、再就是类似于我在库房管理系统中(DataColChanged)写了代码,但是关键列如"出入库登记表_产品编号","出入库登记表_入库数量","出入库登记表_出库数量" 都是从别的表格出来过来的 ,怎么能做到  数据从别的表格复制过来后  就能自动触发DataColChanged 事件呢,或者能做到每次打开这个表格会自动把关键列重置一下 ,这样好保证数据能够运行呢

 


--  作者:有点蓝
--  发布时间:2022/5/18 16:43:00
--  
1、如果已经保存了,没有办法撤回,只能手工改正确

2、如果是添加代码后增加的数据,肯定会触发DataColChanged 事件的。添加代码前存在的数据,手工重置列即可

--  作者:有点灰2
--  发布时间:2022/5/19 8:38:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:30.png
图片点击可在新窗口打开查看
但是我试了两个情况  一个是自动从别的表复制过来的内容   还有就是在这个表中自动添加行   他的库存数量都没有变化   这是什么情况呢
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1 (6).table


--  作者:有点蓝
--  发布时间:2022/5/19 9:01:00
--  
一个是自动从别的表复制过来的内容   还有就是在这个表中自动添加行 -- 怎么操作的,使用了什么代码?
--  作者:有点灰2
--  发布时间:2022/5/19 9:43:00
--  

我在生产计划管理系统中DataColChanged写的

If e.DataCol.Name = "生产流程单_判定" AndAlso e.DataRow("生产流程单_判定") = True Then
    Dim nma() As String = {"生产通知单_产品名称","生产通知单_订单编号","生产流程单_合格数", "生产通知单_图号","生产流程单_半成品入库","生产流程单_成品入库"} \'A表数据来源列
    Dim nmb() As String = {"出入库登记表_产品名称","出入库登记表_产品订单号","出入库登记表_入库数量","出入库登记表_产品编号","出入库登记表_半成品","出入库登记表_成品"} \'B表数据接收列
    Dim dr As DataRow = DataTables("库房管理系统").AddNew
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
End If

 

我在库房管理系统datacolchangde 写的

Select Case e.DataCol.Name
    Case "出入库登记表_产品编号","出入库登记表_入库数量","出入库登记表_出库数量"
        Dim s As String
         Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        If mr("出入库登记表_半成品") Then
            s = " And 出入库登记表_半成品=true"
        ElseIf mr("出入库登记表_成品") Then
            s = " And 出入库登记表_成品=true"
        Else
            Return
        End If
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [出入库登记表_产品编号] = \'" & mr("出入库登记表_产品编号") & "\' " & s , "[_SortKey] Desc")
        If dr Is Nothing Then
            mr("出入库登记表_库存数量") = mr("出入库登记表_入库数量") - mr("出入库登记表_出库数量")
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [出入库登记表_产品编号] = \'" & dr("出入库登记表_产品编号") & "\'  " & s , "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("出入库登记表_库存数量") = drs(i-1)("出入库登记表_库存数量") + drs(i)("出入库登记表_入库数量") - drs(i)("出入库登记表_出库数量")
        Next
        If e.DataCol.Name = "出入库登记表_产品编号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [出入库登记表_产品编号] = \'" & e.OldValue & "\'  " & s, "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[出入库登记表_产品编号] = \'" & e.OldValue & "\' " & s, "[_SortKey]")
                If dr IsNot Nothing Then
                    dr("出入库登记表_库存数量") = dr("出入库登记表_入库数量") - dr("出入库登记表_出库数量")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [出入库登记表_产品编号] = \'" & dr("出入库登记表_产品编号") & "\'  " & s , "[_SortKey]")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("出入库登记表_库存数量") = drs(i-1)("出入库登记表_库存数量") + drs(i)("出入库登记表_入库数量") - drs(i)("出入库登记表_出库数量")
                Next
            End If
        End If
End Select

 

但是从《生产计划管理系统》点完判定后  会把相应的数据传到《库房管理系统》  但是库房管理系统虽然有数据传递过来   但是并没有运行  

后来我又尝试手动输入数据  也没有运行


--  作者:有点蓝
--  发布时间:2022/5/19 10:21:00
--  
调换一下赋值的前后顺序

If e.DataCol.Name = "生产流程单_判定" AndAlso e.DataRow("生产流程单_判定") = True Then
    Dim nma() As String = {"生产流程单_半成品入库","生产流程单_成品入库","生产通知单_产品名称","生产通知单_订单编号","生产流程单_合格数", "生产通知单_图号" } \'A表数据来源列
    Dim nmb() As String = {"出入库登记表_半成品","出入库登记表_成品","出入库登记表_产品名称","出入库登记表_产品订单号","出入库登记表_入库数量","出入库登记表_产品编号" } \'B表数据接收列
    Dim dr As DataRow = DataTables("库房管理系统").AddNew
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
End If

原因是因为如果先给数量赋值,赋值后就会马上触发【库房管理系统datacolchangde 】,而这时成品半成品逻辑列还没有值,导致库房管理系统datacolchangde 】判断成品半成品逻辑列没有值就不会计算库存。