以文本方式查看主题

-  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=150916)

--  作者:海浪声声
--  发布时间:2020/6/10 20:56:00
--  求教: 复制行不成功
入库登记表中增加记录后,希望将记录自动添加到"物资明细"表中,代码如下:

If e.DataCol.Name = "票据号"  Then
          Dim nma() As String = {"物资名称","物资编号","物资类别","保存地点","入库总量","品牌","规格","单位"} \'A表数据来源列
          Dim nmb() As String = {"物资名称","物资编号","物资类别","保存地点","入库总量","品牌","规格","单位"} \'B表数据接收列
          Dim ddd As Row = Tables("物资明细").AddNew
            For i As Integer = 0 To nma.Length - 1
          ddd(nmb(i)) = e.DataRow(nma(i))
         Next
End If

但就是不能实现行数据复制,不得其解.请老师指点.谢谢


--  作者:sloyy
--  发布时间:2020/6/10 21:02:00
--  
条件满足了吗?
messagebox.show(e.DataCol.Name)
If e.DataCol.Name = "票据号"  Then
          Dim nma() As String = {"物资名称","物资编号","物资类别","保存地点","入库总量","品牌","规格","单位"} \'A表数据来源列
          Dim nmb() As String = {"物资名称","物资编号","物资类别","保存地点","入库总量","品牌","规格","单位"} \'B表数据接收列
          Dim ddd As Row = Tables("物资明细").AddNew
            For i As Integer = 0 To nma.Length - 1
          ddd(nmb(i)) = e.DataRow(nma(i))
         Next
End If
看看 显示什么? 

--  作者:海浪声声
--  发布时间:2020/6/10 21:15:00
--  
增加一个对话框?
[此贴子已经被作者于2020/6/10 21:19:31编辑过]

--  作者:海浪声声
--  发布时间:2020/6/10 21:19:00
--  
入库登记表DataColChanged属性如下:

If e.DataCol.Name = "物资名称" Then \'发生变化的是物资名称
    Dim dr As DataRow 
    dr = DataTables("物资明细").Find("物资名称 = \'" & e.DataRow("物资名称") & "\'" ) \'在物资明细表找出该产品
    e.DataRow("保存地点") = User.name
    If dr IsNot Nothing \'如果找到, 则设置各列内容
        e.DataRow("物资类别") = dr("物资类别")
        e.DataRow("入库总量") = dr("入库总量")
        e.DataRow("原有库存") = dr("库存数量")
        e.DataRow("规格") = dr("规格")
        e.DataRow("单位") = dr("单位")
     If e.DataCol.Name = "入库数量" Then \'如果"入库数量发生变化
        e.DataRow ("入库总量") = e.DataRow("入库总量") + e.DataRow("入库数量") 
        e.DataRow("原有库存") = e.DataRow("原有库存") +  e.DataRow("入库数量") 
        dr("入库总量")  =  e.DataRow ("入库总量") 
     End If
    Else
        e.DataRow("原有库存")= 0
       If e.DataCol.Name = "入库数量" Then \'如果"入库数量发生变化
         e.DataRow ("入库总量") = e.DataRow("入库数量")      
        End If

     
      If e.DataCol.Name = "票据号"  Then \'如果票据号发生变化,票据号输入完成
          Dim nma() As String = {"物资名称","物资编号","物资类别","保存地点","入库总量","品牌","规格","单位"} \'A表数据来源列
          Dim nmb() As String = {"物资名称","物资编号","物资类别","保存地点","入库总量","品牌","规格","单位"} \'B表数据接收列
          Dim ddd As Row = Tables("物资明细").AddNew
            For i As Integer = 0 To nma.Length - 1
          ddd(nmb(i)) = e.DataRow(nma(i))
         Next
      End If

End If
End If

If e.DataCol.Name = "保存地点" Then  \'如果保存地点发生变化
  Dim mc As DataRow
  mc = DataTables("物资管理人").find("部门 = \'" & e.DataRow("保存地点") & "\'")
  e.DataRow("保管员") = mc("姓名")
End If

问题在哪呢?
[此贴子已经被作者于2020/6/10 21:22:57编辑过]

--  作者:sloyy
--  发布时间:2020/6/10 23:30:00
--  
调试,运行 看看显示什么
--  作者:海浪声声
--  发布时间:2020/6/11 7:39:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:122.png
图片点击可在新窗口打开查看
每输入一项即显示这个对话框,应该是提示确认,别的没有,也不见详细信息

--  作者:有点蓝
--  发布时间:2020/6/11 9:09:00
--  
最外一层有【If e.DataCol.Name = "物资名称" Then】这个判断,也就是只有"物资名称"列数据变化才能执行if里面的代码,那么在里层在判断其它列名是永远都不会成立的...

试试
Select Case e.DataCol.Name
    Case "物资名称" \'发生变化的是物资名称
        Dim dr As DataRow
        dr = DataTables("物资明细").Find("物资名称 = \'" & e.DataRow("物资名称") & "\'" ) \'在物资明细表找出该产品
        e.DataRow("保存地点") = User.name
        If dr IsNot Nothing \'如果找到, 则设置各列内容
            e.DataRow("物资类别") = dr("物资类别")
            e.DataRow("入库总量") = dr("入库总量")
            e.DataRow("原有库存") = dr("库存数量")
            e.DataRow("规格") = dr("规格")
            e.DataRow("单位") = dr("单位")
        Else
            e.DataRow("原有库存")= 0
        End If
    Case "入库数量" \'如果"入库数量发生变化
        Dim dr As DataRow
        dr = DataTables("物资明细").Find("物资名称 = \'" & e.DataRow("物资名称") & "\'" ) \'在物资明细表找出该产品
        If dr IsNot Nothing
            e.DataRow ("入库总量") = e.DataRow("入库总量") + e.DataRow("入库数量")
            e.DataRow("原有库存") = e.DataRow("原有库存") +  e.DataRow("入库数量")
            dr("入库总量")  =  e.DataRow ("入库总量")
        Else
            e.DataRow("原有库存")= 0
            e.DataRow ("入库总量") = e.DataRow("入库数量")
        End If
    Case "票据号"  \'如果票据号发生变化,票据号输入完成
        Dim nma() As String = {"物资名称","物资编号","物资类别","保存地点","入库总量","品牌","规格","单位"} \'A表数据来源列
        Dim nmb() As String = {"物资名称","物资编号","物资类别","保存地点","入库总量","品牌","规格","单位"} \'B表数据接收列
        Dim ddd As Row = Tables("物资明细").AddNew
        For i As Integer = 0 To nma.Length - 1
            ddd(nmb(i)) = e.DataRow(nma(i))
        Next
    Case "保存地点" \'如果保存地点发生变化
        Dim mc As DataRow
        mc = DataTables("物资管理人").find("部门 = \'" & e.DataRow("保存地点") & "\'")
        e.DataRow("保管员") = mc("姓名")
End Select

--  作者:海浪声声
--  发布时间:2020/6/11 9:27:00
--  
谢谢蓝老师,循环设置的问题我考虑得肤浅了.