以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 自动复制子表各行 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=41152) |
-- 作者:tj-pacer -- 发布时间:2013/10/12 14:19:00 -- 自动复制子表各行 自动复制行 假定表A有个逻辑列,希望在某行选中此逻辑列时,自动将此行复制到表B。 为此可以将表A的DataColChanged事件代码设置为: If e.DataCol.Name = "逻辑列名" AndAlso e.DataRow("逻辑列名") = True Then 上面的代码假定表A和表B的结构相同,且列名相同。 如果列名不同,或者只需复制部分列,可以参考下面的代码: If e.DataCol.Name = "逻辑列名" AndAlso e.DataRow("逻辑列名") = True Then
问题:如果选中表A的逻辑列某行,不需要将该行复制到表B,而是要将表A子表该行关联的所有行复制到表B,代码如何写?
|
-- 作者:Bin -- 发布时间:2013/10/12 14:23:00 -- 利用 GetChildRows http://www.foxtable.com/help/topics/0431.htm 获得所有子表关联行即可. |
-- 作者:tj-pacer -- 发布时间:2013/10/12 15:13:00 -- 我比较愚钝,还是搞不出来。
我是用下面的代码: If e.DataCol.Name = "逻辑列名" AndAlso e.DataRow("逻辑列名") = True Then
完成表A列复制到表B的,现在想不复制表A的行到表B,只是利用表A的逻辑列选中的行,复制表A的子表(表A.C)各行到表B. 不知道如何利用GetChildRows. 能帮我写好吗?谢谢!
|
-- 作者: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 |
-- 作者:tj-pacer -- 发布时间: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 -- 发布时间:2013/10/12 17:35:00 -- 说明没有这些列,你自己调整一下即可. 没什么难度的,你不花心思去理解,怎么会懂呢? |
-- 作者:tj-pacer -- 发布时间:2013/10/12 17:48:00 -- OK, 我用另一种方法解决了。谢谢! |
-- 作者:tj-pacer -- 发布时间: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的该列的新复制的各行中,如何实现那? |
-- 作者:有点甜 -- 发布时间:2013/10/14 22:32:00 -- 回复8楼,直接写代码不就行了? dr("工单号") = e.datarow("工单号")
|
-- 作者:tj-pacer -- 发布时间:2013/10/14 22:42:00 -- 谢谢了,问题终于解决了。 |