以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  产品与模具的关系  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=128816)

--  作者:edisontsui
--  发布时间:2018/12/15 17:06:00
--  产品与模具的关系
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:产品与模具的关系.xls


请看附页excel档案。我有两个数据表,即“物料字典”和“模具清单”。“模具清单”里面的一个模具型号在“物料字典”里面可能会包含多个物料编号,这些物料编号会在“模具清单”的“所应用的产品”这个数据列反映出来。那么,当“物料字典”里面增加、删除数据行或者修改其“模具型号”内容时,希望“模具清单”里面的“所应用的产品”这栏的数据能够得到立即更新。请赐教代码如何写。谢谢。

--  作者:有点蓝
--  发布时间:2018/12/15 17:30:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:byear.zip


--  作者:edisontsui
--  发布时间:2018/12/17 10:40:00
--  
不要意思,我的foxtable版本低了,打不开你给的档案。可否请你将代码发给我即可?谢谢。
--  作者:有点甜
--  发布时间:2018/12/17 10:48:00
--  

物料字典_DataColChanged

 

Select Case e.DataCol.Name
    Case "模具型号","物料编号"
        Dim dr As DataRow = DataTables("模具清单").Find("模具型号=\'" & e.DataRow("模具型号") & "\'")
        If dr Is Nothing Then
            dr = DataTables("模具清单").AddNew
            dr("模具型号") = e.DataRow("模具型号")
        End If
        dr("所应用的产品") = e.DataTable.GetComboListString("物料编号","模具型号=\'" & e.DataRow("模具型号") & "\'").Replace("|",",")
        If e.DataCol.Name = "模具型号" AndAlso e.OldValue > "" Then
            dr = DataTables("模具清单").Find("模具型号=\'" & e.OldValue  & "\'")
            If dr IsNot Nothing Then
                dr("所应用的产品") = e.DataTable.GetComboListString("物料编号","模具型号=\'" & e.OldValue & "\'").Replace("|",",")
            End If
           
        End If
End Select

 

物料字典_DataRowDeleting

 

Dim dr As DataRow = DataTables("模具清单").Find("模具型号=\'" & e.DataRow("模具型号") & "\'")
If dr IsNot Nothing Then
    dr("所应用的产品") = e.DataTable.GetComboListString("物料编号","模具型号=\'" & e.DataRow("模具型号") & "\' and [_Identify] <>" & e.DataRow("_Identify")).Replace("|",",")
End If


--  作者:edisontsui
--  发布时间:2018/12/17 16:32:00
--  

Select Case e.DataCol.Name

    Case "模具型号"

        If e.DataRow("模具型号") <> "不适用"

            Dim dr As DataRow = DataTables("模具清单").Find("模具型号=\'" & e.DataRow("模具型号") & "\'")

            dr("所应用的产品") = e.DataTable.GetComboListString("物料编号","模具型号=\'" & e.DataRow("模具型号") & "\'").Replace("|",",")

        End If

End Select

If e.DataCol.Name = "模具型号" AndAlso e.OldValue > "" AndAlso e.newvalue <> "不适用" Then

    Dim dr As DataRow = DataTables("模具清单").Find("模具型号=\'" & e.DataRow("模具型号") & "\'")

    dr = DataTables("模具清单").Find("模具型号=\'" & e.OldValue  & "\'")

    If dr IsNot Nothing Then

        dr("所应用的产品") = e.DataTable.GetComboListString("物料编号","模具型号=\'" & e.OldValue & "\'").Replace("|",",")

    End If

End If


我将你的代码更改上面那样。我在“物料字典”里面增加和删除数据行时,能够正常运行,满足我们的要求。但是当我在“物料字典”里面执行“模具型号”的“重置列”时,会出现如下警告:


.NET Framework 版本:2.0.50727.8793

Foxtable 版本:2017.3.18.1

错误所在事件:表,物料字典, DataColChanged

详细错误信息:

调用的目标发生了异常。

未将对象引用设置到对象的实例。


为什么呢?


--  作者:有点甜
--  发布时间:2018/12/17 16:58:00
--  

没看懂你需要做什么效果,先试试

 

Select Case e.DataCol.Name
    Case "模具型号"
        If e.DataRow("模具型号") <> "不适用"
            Dim drs = DataTables("模具清单").Select("模具型号=\'" & e.DataRow("模具型号") & "\'")
            Dim str = e.DataTable.GetComboListString("物料编号","模具型号=\'" & e.DataRow("模具型号") & "\'").Replace("|",",")
            For Each dr As DataRow In drs
                dr("所应用的产品") = str
            Next
        End If       
End Select

If e.DataCol.Name = "模具型号" AndAlso e.OldValue > "" AndAlso e.newvalue <> "不适用" Then
   
    Dim drs1 = DataTables("模具清单").Select("模具型号=\'" & e.DataRow("模具型号") & "\'")
   
    Dim drs2 = DataTables("模具清单").Select("模具型号=\'" & e.OldValue  & "\'")
    Dim str1 = e.DataTable.GetComboListString("物料编号","模具型号=\'" & e.DataRow("模具型号") & "\'").Replace("|",",")
    Dim str2 = e.DataTable.GetComboListString("物料编号","模具型号=\'" & e.OldValue & "\'").Replace("|",",")
   
    For Each dr As DataRow In drs1
        dr("所应用的产品") = str1
    Next
    For Each dr As DataRow In drs2
        dr("所应用的产品") = str2
    Next   
End If