以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何在表C中找出对应的多行并自动增加到表A中  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100668)

--  作者:wangj6666
--  发布时间:2017/5/16 10:22:00
--  如何在表C中找出对应的多行并自动增加到表A中
各位专家:您们好!
图片点击可在新窗口打开查看此主题相关图片如下:附件多行2表c.png
图片点击可在新窗口打开查看
      如“附件多行1表A”,我想在这个表A中输入图中数据后,能自动在“附件多行2表C”中找出对应”工艺名称“和对应”报料阶段“的行,并自动在表A中增加行并将“工序名称”、“加料顺序”、“材料名称”、“用量百分比”、“材料干湿”的数据填入。请问如何实现?谢谢!
图片点击可在新窗口打开查看此主题相关图片如下:附件多行1表a.png
图片点击可在新窗口打开查看

--  作者:18523982317
--  发布时间:2017/5/16 11:08:00
--  
建议参考帮助里面  自定义录入界面之三
--  作者:有点色
--  发布时间:2017/5/16 11:09:00
--  

DataColChanged

 

Select Case e.DataCol.name
    Case "报料阶段", "使用工艺名称"
        If e.DataRow.isnull("报料阶段")= False AndAlso e.DataRow.isnull("使用工艺名称") = False Then
            Dim Cols1() As String = {"来源列一","来源列二","来源列三"}
            Dim Cols2() As String = {"接收列一","接收列二","接收列三"}
            Dim drs As List(Of DataRow) = DataTables("表B").Select("报料阶段 = \'" & e.DataRow("报料阶段") & "\' and 工艺名称 = \'" & e.DataRow("使用工艺名称") & "\'")
            systemready = False
            For i As Integer = 0 To drs.count-1
                Dim dr2 As DataRow
                If i = 0 Then
                    dr2 = e.DataRow
                Else
                    dr2 = e.DataTable.addnew
                End If
                For j As Integer = 0 To Cols1.Length -1
                    dr2(Cols2(j)) = e.DataRow(Cols1(j))
                Next
               
                dr2("报料阶段") = e.DataRow("报料阶段")
                dr2("使用工艺名称") = e.DataRow("使用工艺名称")
               
            Next
            systemready = True
        End If
End Select


--  作者:wangj6666
--  发布时间:2017/5/16 13:05:00
--  
谢谢专家的回复,我将其修改为以下的代码后,未见在表A中增加行,也未见自动填入对应几列的数据,仅有“用量百分比”填入了1个“0”,请问是什么地方没有写对吗?请再帮我看看!谢谢!
Select Case e.DataCol.name
    Case "报料阶段", "使用工艺名称"
        If e.DataRow.isnull("报料阶段")= False AndAlso e.DataRow.isnull("使用工艺名称") = False Then
            Dim Cols1() As String = {"使用工序","加料序号","材料名称","用量百分比","材料干湿"}
            Dim Cols2() As String = {"使用工序","加料序号","材料名称","用量百分比","材料干湿"}
            Dim drs As List(Of DataRow) = DataTables("工艺配方").Select("报料阶段 = \'" & e.DataRow("报料阶段") & "\' and 使用工艺名称 = \'" & e.DataRow("使用工艺名称") & "\'")
            systemready = False
            For i As Integer = 0 To drs.count-1
                Dim dr2 As DataRow
                If i = 0 Then
                    dr2 = e.DataRow
                Else
                    dr2 = e.DataTable.addnew
                End If
                For j As Integer = 0 To Cols1.Length -1
                    dr2(Cols2(j)) = e.DataRow(Cols1(j))
                Next
                
                dr2("报料阶段") = e.DataRow("报料阶段")
                dr2("使用工艺名称") = e.DataRow("使用工艺名称")
                
            Next
            systemready = True
        End If
End Select

--  作者:有点色
--  发布时间:2017/5/16 14:32:00
--  

是不是你表名写错了?要写表C的名字

 

Dim drs As List(Of DataRow) = DataTables("工艺配方").Select("报料阶段 = \'" & e.DataRow("报料阶段") & "\' and 工艺名称 = \'" & e.DataRow("使用工艺名称") & "\'")

 

如果还不行,单独做个小例子上传上来测试。


--  作者:wangj6666
--  发布时间:2017/5/16 16:25:00
--  
是的,我就是用的表C的名称。做小例子上传,怎么做?我还没有试过呢,能不能给点提示!谢谢!
--  作者:有点色
--  发布时间:2017/5/16 17:09:00
--  
以下是引用wangj6666在2017/5/16 16:25:00的发言:
是的,我就是用的表C的名称。做小例子上传,怎么做?我还没有试过呢,能不能给点提示!谢谢!

 

新建一个项目,把你的表A、表C数据导入,上传上来。

 

或者,直接把你的项目上传上来。


--  作者:wangj6666
--  发布时间:2017/5/16 17:26:00
--  
是不是这样上传,我试一下,您帮我看看!谢谢了!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:水场配料核算系统.table


--  作者:有点色
--  发布时间:2017/5/16 18:06:00
--  

改一下

 

Select Case e.DataCol.name
    Case "配料日期"
        If e.NewValue Is Nothing Then
            e.DataRow("结算日期") = Nothing
        Else
            Dim dt As Date = e.NewValue
            If dt.Day > 25 Then \'如果为25日以后的日期
                dt = new Date(dt.year,dt.month,1) \'改为下个月的第一天
                dt= dt.AddMonths(1)
            End If
            e.DataRow("结算日期") = dt
        End If
End Select

Select Case e.DataCol.name
    Case "报料阶段", "使用工艺名称"
        If e.DataRow.isnull("报料阶段")= False AndAlso e.DataRow.isnull("使用工艺名称") = False Then
            Dim Cols1() As String = {"使用工序","加料序号","材料名称","用量百分比","材料干湿"}
            Dim Cols2() As String = {"使用工序","加料序号","材料名称","用量百分比","材料干湿"}
            Dim drs As List(Of DataRow) = DataTables("工艺配方").Select("报料阶段 = \'" & e.DataRow("报料阶段") & "\' and 使用工艺名称 = \'" & e.DataRow("使用工艺名称") & "\'")
            systemready = False
            For i As Integer = 0 To drs.count-1
                Dim dr2 As DataRow
                If i = 0 Then
                    dr2 = e.DataRow
                Else
                    dr2 = e.DataTable.addnew
                End If
                For j As Integer = 0 To Cols1.Length -1
                    dr2(Cols2(j)) = drs(i)(Cols1(j))
                Next
               
                dr2("报料阶段") = e.DataRow("报料阶段")
                dr2("使用工艺名称") = e.DataRow("使用工艺名称")
               
            Next
            systemready = True
        End If
End Select


--  作者:wangj6666
--  发布时间:2017/5/17 13:51:00
--  
已更改了红色部分,数据能找到并填入,但还是只填入了第一行的数据,并没能够增加另外的几行,并填入工艺配方表中对应的数据。还请您再帮我看看如何解决。谢谢!