以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  引用上行数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=101676)

--  作者:zhangning
--  发布时间:2017/6/5 13:51:00
--  引用上行数据

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


老师,您好!
附图所示,显示的是电动CT从01~15工序,每次导入时一齐导入15行,(如果是别的产品,就不是15行)
这15行的前三列“制单号、流动序号、产品序号”的内容完全一样,
(如图,每次导入这一组时,会提前输入一行,)
请问老师,如何将剩余的行的前3列内容自动引入呢?

要达到的效果是:

1  201706-001 01 201706-001-01
2  201706-001 01 201706-001-01
3  201706-001 01 201706-001-01
4  201706-001 01 201706-001-01

......
15  201706-001 01 201706-001-01

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

参考

 

Dim cs() As String = {"第一列", "第二列", "第三列"}
Dim t As Table = CurrentTable
For Each c As String In cs
    For i As Integer = 1 To t.Rows.count-1
        If t.Rows(i).IsNull(c) Then
            t.Rows(i)(c) = t.Rows(i-1)(c)
        End If
    Next
Next


--  作者:zhangning
--  发布时间:2017/6/5 14:24:00
--  
谢谢老师,
我用的导入工程代码是:
Select Case e.DataCol.Name
    Case "部品ID"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("部品ID") Then
            dr("工序序号") = Nothing
            dr("工程") = Nothing
        Else
            Dim filter As String
            filter = "部品ID = \'" & dr("部品ID") & "\' and 工序序号 Is Not null"
            Dim drs As List(Of DataRow) = DataTables("工程和工时").Select(filter, "工序序号")
            Systemready = False
            For i As Integer = 0 To drs.count - 1
                If i > 0 Then
                    dr = e.DataTable.addnew()
                End If
                Dim pr = drs(i)
                dr("部品ID") = pr("部品ID")
                dr("工序序号") = pr("工序序号")
                dr("工程") = pr("工程")
                dr("备注") = pr("备注")
                dr("投入数量") = "1"
                dr("任务名称") = pr("部品ID") + " " + pr("备注")
                dr("工程耗时H") = pr("装") / 60
                
            Next
            Systemready = True
        End If
End Select

想要的结果是每次导入时就引用01序相对应的三列,所以,每次导入时的需要不一样,

如下图:

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


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

呃,同理,都是直接赋值就可以了的啊

 

dr("制单号") = pr("制单号")

dr("流动序号") = pr("流动序号")

 

或者

 

dr("制单号") = e.DataRow("制单号")

dr("流动序号") = e.DataRow("流动序号")

[此贴子已经被作者于2017/6/5 14:32:38编辑过]

--  作者:zhangning
--  发布时间:2017/6/5 14:51:00
--  
老师,每次导入时,是导入一个组合,需要在这个组合内起到以下代码的效果,
Dim cs() As String = {"第一列", "第二列", "第三列"}
Dim t As Table = CurrentTable
For Each c As String In cs
    For i As Integer = 1 To t.Rows.count-1
        If t.Rows(i).IsNull(c) Then
            t.Rows(i)(c) = t.Rows(i-1)(c)
        End If
    Next
Next
以上代码的效果时整个表都是引用上行前三列的数据了,是不是需要加入范围的限制呢?

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

看4楼,直接赋值不行么?

 

dr("制单号") = e.DataRow("制单号")

dr("流动序号") = e.DataRow("流动序号")


--  作者:zhangning
--  发布时间:2017/6/5 15:48:00
--  
解决了,谢谢老师