以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  自动复制行问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=41531)

--  作者:tj-pacer
--  发布时间:2013/10/21 23:04:00
--  自动复制行问题

开发指南自动复制行

If e.DataCol.Name = "逻辑列名" AndAlso e.DataRow("逻辑列名") = True Then
    Dim nma() As String = {"A1","A2","A3","A4"}
\'A表数据来源列
    Dim nmb() As String = {"B1"
,"B2","B3","B4"} \'B表数据接收列
    Dim dr As DataRow = DataTables("表B"
).AddNew
   
For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
   
Next
End
If

 

要是不用逻辑列名,改用字符型的列如:

 

If e. DataCol.Name="客户" and AndAlso e.DataRow("客户")="AAA"

 Dim nma() As String = {"A1","A2","A3","A4"} \'A表数据来源列
    Dim nmb() As String = {"B1"
,"B2","B3","B4"} \'B表数据接收列
    Dim dr As DataRow = DataTables("表B"
).AddNew
   
For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
   
Next
End
I

 

问题是每次重置列后,都会复制一遍,怎样才能只复制一次?


--  作者:有点甜
--  发布时间:2013/10/21 23:08:00
--  
 这样的话,就需要在表B里存储表A的_Identify列。

 在新增复制之前,先用find查找表B是否有表A当前行的内容(比较_Identify),有就不新增/复制。
[此贴子已经被作者于2013-10-21 23:08:55编辑过]

--  作者:tj-pacer
--  发布时间:2013/10/21 23:39:00
--  
能帮我写出代码吗?我现在还不行?
--  作者:yan2006l
--  发布时间:2013/10/22 1:58:00
--  

你再增加一个辅助列得了:逻辑列“已复制”。然后代码加一点点进去:

if e.DataRow("已复制") = false then

e.DataRow("已复制") = true

   

    If e.DataCol.Name = "逻辑列名" AndAlso e.DataRow("逻辑列名") = True Then
    Dim nma() As String = {"A1","A2","A3","A4"}
\'A表数据来源列
    Dim nmb() As String = {"B1"
,"B2","B3","B4"} \'B表数据接收列
    Dim dr As DataRow = DataTables("表B"
).AddNew
   
For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
   
Next
    End
If

 

end if


--  作者:tj-pacer
--  发布时间:2013/10/22 6:18:00
--  
以下是引用yan2006l在2013-10-22 1:58:00的发言:

你再增加一个辅助列得了:逻辑列“已复制”。然后代码加一点点进去:

if e.DataRow("已复制") = false then

e.DataRow("已复制") = true

   

    If e.DataCol.Name = "逻辑列名" AndAlso e.DataRow("逻辑列名") = True Then
    Dim nma() As String = {"A1","A2","A3","A4"}
\'A表数据来源列
    Dim nmb() As String = {"B1"
,"B2","B3","B4"} \'B表数据接收列
    Dim dr As DataRow = DataTables("表B"
).AddNew
   
For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
   
Next
    End
If

 

end if

谢谢!这样可以解决重复复制的问题,但我希望没有手动点击的动作,将复合条件的行完全自动复制到另一张表。


--  作者:tj-pacer
--  发布时间:2013/10/22 7:46:00
--  
以下是引用有点甜在2013-10-21 23:08:00的发言:
 这样的话,就需要在表B里存储表A的_Identify列。

 在新增复制之前,先用find查找表B是否有表A当前行的内容(比较_Identify),有就不新增/复制。
[此贴子已经被作者于2013-10-21 23:08:55编辑过]

A表_Identify的添加到表B(VMI1)的“调拨ID”列,下面的代码还是有错误,不知如何改,请指教,谢谢!

If e.DataCol.Name = "CustomerCode" AndAlso e.DataRow("CustomerCode") = "LOMBJ"
    Dim nma() As String = {"_Identify","StokvisPN","CustomerCode","实际发货数量"}
    Dim nmb() As String = {"调拨ID","StokvisPN","客户编码","数量"}
  
    Dim dr As DataRow= DataTables("VMI1入库")
    dr = e.DataTables("VMI1入库") .Find("调拨ID = \'" & e.NewValue & "\'")
    If dr IsNot Nothing Then
        e.Cancel = True
    Else
            Dim dr As DataRow = DataTables("VMI1入库").AddNew
            For i As Integer = 0 To nma.Length - 1
                dr(nmb(i)) = e.DataRow(nma(i))
            Next
       End If
End If


--  作者:有点甜
--  发布时间:2013/10/22 20:57:00
--  
 试试这样改

If e.DataCol.Name = "CustomerCode" AndAlso e.DataRow("CustomerCode") = "LOMBJ"
    Dim nma() As String = {"_Identify","StokvisPN","CustomerCode","实际发货数量"}
    Dim nmb() As String = {"调拨ID","StokvisPN","客户编码","数量"}
   
    Dim dr As DataRow
    dr = DataTables("VMI1入库").Find("调拨ID = \'" & e.NewValue & "\'")
    If dr IsNot Nothing Then
        e.Cancel = True
    Else
            Dim dr As DataRow = DataTables("VMI1入库").AddNew
            For i As Integer = 0 To nma.Length - 1
                dr(nmb(i)) = e.DataRow(nma(i))
            Next
       End If
End If

--  作者:tj-pacer
--  发布时间:2013/10/22 22:11:00
--  

刚试过了,报错“编译错误,变量dr在封闭块中隐藏变量“,错误代码: Dim dr As DataRow = DataTables("VMI1入库").AddNew

 

记得其它项目代码也有类似的报错,你让将所有的dr改成ndr就好了,我这次也试了ndr,还是报错。


--  作者:有点甜
--  发布时间:2013/10/22 22:16:00
--  
 呃,给dr命名成一个新的名字呗。任意取一个名字。
--  作者:有点甜
--  发布时间:2013/10/22 22:17:00
--  
If e.DataCol.Name = "CustomerCode" AndAlso e.DataRow("CustomerCode") = "LOMBJ"
    Dim nma() As String = {"_Identify","StokvisPN","CustomerCode","实际发货数量"}
    Dim nmb() As String = {"调拨ID","StokvisPN","客户编码","数量"}
   
    Dim dr As DataRow
    ndr = DataTables("VMI1入库").Find("调拨ID = \'" & e.NewValue & "\'")
    If ndr IsNot Nothing Then
        e.Cancel = True
    Else
            Dim nnnnndr As DataRow = DataTables("VMI1入库").AddNew
            For i As Integer = 0 To nma.Length - 1
                nnnnndr(nmb(i)) = e.DataRow(nma(i))
            Next
       End If
End If
[此贴子已经被作者于2013-10-22 22:17:14编辑过]