以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  自动生成行  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=123578)

--  作者:13775189031
--  发布时间:2018/8/18 10:21:00
--  自动生成行

表A

Select Case e.DataCol.name
    Case "焊缝编号"
        If e.DataRow.IsNull("焊缝编号") Then
            DataTables("组装件详单及尺寸要求").DeleteFor("零部件编号=\'" & e.DataRow("零部件编号") & "\'")
        Else
            Dim ndr1 As DataRow = DataTables("组装件详单及尺寸要求").Find("零部件编号 = \'" & e.DataRow("零部件编号") & "\'")
            If ndr1 Is Nothing Then
                For i As Integer = 1 To e.DataRow("数量")
                    Dim ndr As DataRow = DataTables("组装件详单及尺寸要求").AddNew
                    ndr("零部件编号") = e.DataRow("零部件编号")
                    ndr("数量") = "1"
                Next
            End If
        End If
End Select

 

若表A 中数量改变,表“组装件详单及尺寸要求”中自动生成的行数也要随之改变,该怎么改?


--  作者:有点蓝
--  发布时间:2018/8/18 10:33:00
--  
代码没有问题。不过查询条件是"零部件编号",为什么Case "焊缝编号"判断这个列,整个代码貌似和这个列没有关系,是不是应该改为:

Select Case e.DataCol.name
    Case "零部件编号"
        If e.DataRow.IsNull("零部件编号") Then
            DataTables("组装件详单及尺寸要求").DeleteFor("零部件编号=\'" & e.OldValue & "\'")
        Else
            Dim ndr1 As DataRow = DataTables("组装件详单及尺寸要求").Find("零部件编号 = \'" & e.DataRow("零部件编号") & "\'")
            If ndr1 Is Nothing Then
                For i As Integer = 1 To e.DataRow("数量")
                    Dim ndr As DataRow = DataTables("组装件详单及尺寸要求").AddNew
                    ndr("零部件编号") = e.DataRow("零部件编号")
                    ndr("数量") = "1"
                Next
            End If
        End If
End Select

--  作者:13775189031
--  发布时间:2018/8/18 10:43:00
--  

是不是因为表A 中“数量”是表达式列,所以不行,要怎么改?


--  作者:有点蓝
--  发布时间:2018/8/18 11:04:00
--  
和这个没有关系。2楼用法测试有什么问题?具体上传实例看看
--  作者:13775189031
--  发布时间:2018/8/18 15:23:00
--  

在“焊接部件清单”中只要列“焊缝编号”不为空,则在表“组装件详单及尺寸要求”中自动增加行

当“数量”列有变化时,“组装件详单及尺寸要求”中的行数不能随之改变

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb


--  作者:有点蓝
--  发布时间:2018/8/18 15:46:00
--  
意思是数量等于3时,“组装件详单及尺寸要求”添加3行,如果数量改为4,“组装件详单及尺寸要求”在增加一行?如果数量改为2,“组装件详单及尺寸要求”要减去一行?
--  作者:13775189031
--  发布时间:2018/8/18 16:23:00
--  

是的


--  作者:有点蓝
--  发布时间:2018/8/18 16:43:00
--  
零部件清单,datacolchanged。1楼的代码不用改

Select Case e.DataCol.name
    Case "数量"
        If e.DataRow.IsNull("数量") Then
            DataTables("组装件详单及尺寸要求").DeleteFor("零部件编号=\'" & e.DataRow("零部件编号") & "\'")
        Else
            Dim dr As DataRow = DataTables("焊接部件清单").Find("零部件编号 = \'" & e.DataRow("零部件编号") & "\' and 焊缝编号 is not null")
            If dr IsNot Nothing Then
                Dim drs As List(Of DataRow) = DataTables("组装件详单及尺寸要求").Select("零部件编号 = \'" & e.DataRow("零部件编号") & "\'")
                If drs.Count > e.DataRow("数量") Then
                    Dim cnt = drs.Count - e.DataRow("数量")
                    For i As Integer = 1 To cnt
                        drs(drs.Count - i).delete
                    Next
                ElseIf drs.Count < e.DataRow("数量")
                    Dim cnt = e.DataRow("数量") - drs.Count
                    For i As Integer = 1 To cnt
                        Dim ndr As DataRow = DataTables("组装件详单及尺寸要求").AddNew
                        ndr("零部件编号") = e.DataRow("零部件编号")
                        ndr("生产令号") = e.DataRow("生产令号")
                        ndr("项目名称") = e.DataRow("项目名称")
                        ndr("零件名称") = e.DataRow("零件名称")
                        ndr("零件图号") = e.DataRow("零件图号")
                        ndr("数量") = "1"
                    Next
                End If
            End If
        End If
End Select
[此贴子已经被作者于2018/8/18 16:44:30编辑过]

--  作者:13775189031
--  发布时间:2018/8/20 15:48:00
--  

Select Case e.DataCol.name
    Case "焊接方法"
        If e.DataRow.IsNull("焊接方法") Then
            DataTables("焊接明细表").DeleteFor("零部件编号 = \'" & e.DataRow("零部件编号") & "\'")
        Else
            Dim ndr2 As DataRow = DataTables("焊接明细表").Find("零部件编号 = \'" & e.DataRow("零部件编号") & "\' And 焊缝编号 = \'" & e.DataRow("焊缝编号") & "\' And 工艺卡号 = \'" & e.DataRow("工艺卡号") & "\'And 焊接方法 = \'" & e.DataRow("焊接方法") & "\'")
            If ndr2 Is Nothing Then
                For i As Integer = 1 To e.DataRow("数量")
                    Dim ndr As DataRow = DataTables("焊接明细表").AddNew
                    ndr("零部件编号") = e.DataRow("零部件编号")
                    ndr("焊缝编号") = e.DataRow("焊缝编号")
                    ndr("工艺卡号") = e.DataRow("工艺卡号")
                    ndr("焊接方法") = e.DataRow("焊接方法")
                    ndr("数量") = "1"
                Next
            End If
        End If
End Select

 

这一类代码中参数如“焊缝编号”或“工艺卡号”等,若主表中参数修改,如何能让关联表中生成行中的参数也自动修改?



--  作者:有点蓝
--  发布时间:2018/8/20 16:16:00
--  
父表:datacolchanged

Select Case e.DataCol.name
    Case "焊缝编号"
        Dim drs As List(Of DataRow) = e.DataRow.GetChildRows("关联表子表名称")
        For Each dr As DataRow In drs
            dr("焊缝编号") = e.NewValue
        Next
End Select