以文本方式查看主题

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

--  作者:seintfei
--  发布时间:2013/11/25 10:30:00
--  请教跨表复制数据

请教各位老师:

 

我的情况是,一个项目报价,有N张图纸,报价后,客户可能只挑其中N张图纸下单。我需求是 在报价表选定客户下单的项目后,报价表 和 报价明细表 的数据能自动复制到 订单表 和 订单明细表 中 。


--  作者:狐狸爸爸
--  发布时间:2013/11/25 10:37:00
--  

复制数据是很简单的:

http://www.foxtable.com/help/topics/0680.htm

http://www.foxtable.com/help/topics/1533.htm

http://www.foxtable.com/help/topics/2292.htm

 

先看看上面的帮助,尝试自己解决一下,如果搞不定,就做个简单的例子发上来(不用整个项目上传),我们帮你搞定,以后你参照着写。


--  作者:Bin
--  发布时间:2013/11/25 10:38:00
--  
可以考虑使用数据填充器http://www.foxtable.com/help/topics/0680.htm
--  作者:seintfei
--  发布时间:2013/11/25 10:52:00
--  
谢谢狐爸,我先试试看~
--  作者:seintfei
--  发布时间:2013/11/25 21:21:00
--  

 

 

If e.DataCol.Name = "受注" AndAlso e.DataRow("受注") = True Then
    Dim nma() As String = {"客户代码","项目号","报价单编号","业务担当","采购担当","备注"} \'A表数据来源列
    Dim nmb() As String = {"客户代码","项目号","报价单编号","业务担当","采购担当","备注"} \'B表数据接收列
    Dim dr As DataRow = DataTables("项目订单").AddNew
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
End If

 

上述代码,我想实现 选定 逻辑列 “受注”的行变成锁定状态,后面加多一个逻辑列 “取消受注”,选定后,行解锁,“受注”状态取消,对应复制的数据也删除,请问代码如何写?


--  作者:有点甜
--  发布时间:2013/11/25 21:30:00
--  
 嗯嗯,楼主,可以参考一下帮助
 

 或者参考一个例子


--  作者:有点酸
--  发布时间:2013/11/26 8:12:00
--  

1、不需要两个逻辑列,一个“受注”逻辑列即可

 

2、不需要锁定行,用PrepareEdit事件动态控制:

http://www.foxtable.com/help/topics/0605.htm

 

将PrepareEdit事件代码设置为:

 

if e.Col.Name <> "受注" AndAlso e.Row("受注") = True Then 

    e.Cancel = true

End If

 

3、DataColChanged事件代码改为:

 

If e.DataCol.Name = "受注" Then
    If  e.DataRow("受注") = True Then ‘如果勾选
        Dim nma() As String = {"客户代码","项目号","报价单编号","业务担当","采购担当","备注"} \'A表数据来源列
        Dim nmb() As String = {"客户代码","项目号","报价单编号","业务担当","采购担当","备注"} \'B表数据接收列
        Dim dr As DataRow = DataTables("项目订单").AddNew
        For i As Integer = 0 To nma.Length - 1
            dr(nmb(i)) = e.DataRow(nma(i))
        Next
    Else ’如果是取消勾选
        DataTables("项目订单").Deletefor("报价单编号 = \'" & e.DataRow("报价单编号") & "\'")  \'删除对应报价单号的行
    End If
End If


--  作者:seintfei
--  发布时间:2013/11/26 21:01:00
--  

谢谢!

 

如果想再完善些 项目报价 表 的 受注 取消打钩  项目报价明细 表 的 受注 也一起取消打钩 请问代码如何实现?


--  作者:有点甜
--  发布时间:2013/11/26 21:29:00
--  
 回复8楼,代码参考:

If e.DataCol.Name = "受注" Then
    If  e.DataRow("受注") = True Then \'如果勾选
        Dim nma() As String = {"客户代码","项目号","报价单编号","业务担当","采购担当","备注"} \'A表数据来源列
        Dim nmb() As String = {"客户代码","项目号","报价单编号","业务担当","采购担当","备注"} \'B表数据接收列
        Dim dr As DataRow = DataTables("项目订单").AddNew
        For i As Integer = 0 To nma.Length - 1
            dr(nmb(i)) = e.DataRow(nma(i))
        Next
    Else \'如果是取消勾选
        DataTables("项目订单").Deletefor("报价单编号 = \'" & e.DataRow("报价单编号") & "\'")  \'删除对应报价单号的行
        DataTables("项目报价明细").ReplaceFor("受注", False, "报价单编号 = \'" & e.DataRow("报价单编号") & "\'")
    End If
End If

--  作者:seintfei
--  发布时间:2013/11/26 22:05:00
--  
谢谢指教!