Foxtable(狐表)用户栏目专家坐堂 → 自动复制子表各行


  共有5809人关注过本帖树形打印复制链接

主题:自动复制子表各行

帅哥哟,离线,有人找我吗?
tj-pacer
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
自动复制子表各行  发帖心情 Post By:2013/10/12 14:19:00 [只看该作者]

自动复制行

假定表A有个逻辑列,希望在某行选中此逻辑列时,自动将此行复制到表B。

为此可以将表A的DataColChanged事件代码设置为:

If e.DataCol.Name = "逻辑列名" AndAlso e.DataRow("逻辑列名") = True Then
     Dim dr As DataRow = DataTables("表B").AddNew
    
For Each dc As DataCol In DataTables("B").DataCols
         dr(dc.Name) = e.DataRow(dc.Name)
    
Next
End
If

上面的代码假定表A和表B的结构相同,且列名相同。

如果列名不同,或者只需复制部分列,可以参考下面的代码:

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

 

问题:如果选中表A的逻辑列某行,不需要将该行复制到表B,而是要将表A子表该行关联的所有行复制到表B,代码如何写?

 


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/10/12 14:23:00 [只看该作者]

利用 GetChildRows   http://www.foxtable.com/help/topics/0431.htm  获得所有子表关联行即可.

 回到顶部
帅哥哟,离线,有人找我吗?
tj-pacer
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
  发帖心情 Post By:2013/10/12 15:13: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

 

完成表A列复制到表B的,现在想不复制表A的行到表B,只是利用表A的逻辑列选中的行,复制表A的子表(表A.C)各行到表B. 不知道如何利用GetChildRows. 能帮我写好吗?谢谢!

 


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/10/12 15:22: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 drs As List(Of Datarow)
   drs = 
e.DataRow.GetChildRows("子表")
   For Each 
dr2 As DataRow In drs
    
Dim dr As DataRow = DataTables("表B").AddNew
    
For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = dr2(nma(i))
    
Next
   Next

    

End
 If

 回到顶部
帅哥哟,离线,有人找我吗?
tj-pacer
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
  发帖心情 Post By:2013/10/12 17:31:00 [只看该作者]

以下是引用Bin在2013-10-12 15:22: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 drs As List(Of Datarow)
   drs = 
e.DataRow.GetChildRows("子表")
   For Each 
dr2 As DataRow In drs
    
Dim dr As DataRow = DataTables("表B").AddNew
    
For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = dr2(nma(i))
    
Next
   Next

    

End
 If

试做了,但是报错显示列“A”,"B","C"不属于“子表”。


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/10/12 17:35:00 [只看该作者]

说明没有这些列,你自己调整一下即可. 没什么难度的,你不花心思去理解,怎么会懂呢?

 回到顶部
帅哥哟,离线,有人找我吗?
tj-pacer
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
  发帖心情 Post By:2013/10/12 17:48:00 [只看该作者]

OK, 我用另一种方法解决了。谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
tj-pacer
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
  发帖心情 Post By:2013/10/14 22:21:00 [只看该作者]

以下是引用Bin在2013-10-12 15:22: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 drs As List(Of Datarow)
   drs = 
e.DataRow.GetChildRows("子表")
   For Each 
dr2 As DataRow In drs
    
Dim dr As DataRow = DataTables("表B").AddNew
    
For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = dr2(nma(i))
    
Next
   Next

    

End
 If

现在表A的某行子表各行都可以复制到表B了,但是表A的这行的一个值(例如工单号)要同时复制到表B的该列的新复制的各行中,如何实现那?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/14 22:32:00 [只看该作者]

 回复8楼,直接写代码不就行了?

 dr("工单号") = e.datarow("工单号")

 回到顶部
帅哥哟,离线,有人找我吗?
tj-pacer
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
  发帖心情 Post By:2013/10/14 22:42:00 [只看该作者]

谢谢了,问题终于解决了。

 回到顶部