以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]从水平表到垂直表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=134241)

--  作者:工匠
--  发布时间:2019/4/30 16:51:00
--  [求助]从水平表到垂直表
老师好
请帮看看,这种水平数据表,如何根据选中表A的行(一行或多行),在窗口点击“从表B继承到表D(横向变为纵向)”按钮时,将表D数据表里符合等于表A那些被选择的行内容(编码/品名/规格/备注)进行按需求写到表D数据表,谢谢!

补充:如果表NOXX列对应行值是空白的,则该行对应列则不继承到表D

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:从水平到垂直.zip

图片点击可在新窗口打开查看此主题相关图片如下:从水平到垂直.jpg
图片点击可在新窗口打开查看


谢谢!
[此贴子已经被作者于2019/4/30 17:13:56编辑过]

--  作者:有点甜
--  发布时间:2019/4/30 17:18:00
--  

Dim t As Table = Tables("表A")
For i As Integer = t.TopPosition To t.BottomPosition
    Dim dr1 As Row = t.Rows(i)
    Dim dr2 As DataRow = DataTables("表B").Find("编码 = \'" & dr1("编码") & "\' and 品名 = \'" & dr1("品名") & "\' and 规格 = \'" & dr1("规格")  & "\' and 备注 = \'" & dr1("备注")  & "\'")
    If dr2 IsNot Nothing Then
        For Each c As Col In Tables("表b").Cols
            If c.name.StartsWith("NO") Then
                Dim nr As Row = Tables("表D").addnew
                nr("编码") = dr2("编码")
                nr("品名") = dr2("品名")
                nr("规格") = dr2("规格")
                nr("备注") = dr2("备注")
                nr("nox") = c.name
                nr("no") = dr2(c.name)
            End If
        Next
    End If
Next


--  作者:工匠
--  发布时间:2019/4/30 17:44:00
--  
谢谢甜老师,现在可以按需求从表B继承,请帮再优化下
1.如果表B的: NO01-NO10含后续新增列对应行列是空白的单元格列,这列N0XX就不写入到表D(后续表B可能会随时增加列,会造成表D有太多不需要的行)
2.现在选择表A行,点击“从表B继承到表D(横向变为纵向)”,如果点了多次,会重复从表B写入,需要只写入不重复的(判断要求:1.选择的表A行  编码/品名/规格/备注 4个条件从表B里查找比较,并结合表D同时满足  编码/品名/规格/备注 4个条件+表B里同 编码/品名/规格/备注 4个条件行对应的NOXX列(NOXX列为 NO01-NO10含后续新增加列)不为空值)的行

万分感谢!



--  作者:有点甜
--  发布时间:2019/4/30 17:53:00
--  
Dim t As Table = Tables("表A")
For i As Integer = t.TopPosition To t.BottomPosition
    Dim dr1 As Row = t.Rows(i)
    Dim dr2 As DataRow = DataTables("表B").Find("编码 = \'" & dr1("编码") & "\' and 品名 = \'" & dr1("品名") & "\' and 规格 = \'" & dr1("规格")  & "\' and 备注 = \'" & dr1("备注")  & "\'")
    If dr2 IsNot Nothing Then
        For Each c As Col In Tables("表b").Cols
            If c.name.StartsWith("NO") AndAlso dr2.IsNull(c.name) = False Then
                Dim nr As DataRow = DataTables("表D").find("编码 = \'" & dr1("编码") & "\' and 品名 = \'" & dr1("品名") & "\' and 规格 = \'" & dr1("规格")  & "\' and 备注 = \'" & dr1("备注")  & "\' and nox = \'" & c.name & "\'")
                If nr Is Nothing Then nr = DataTables("表D").addnew               
                nr("编码") = dr2("编码")
                nr("品名") = dr2("品名")
                nr("规格") = dr2("规格")
                nr("备注") = dr2("备注")
                nr("nox") = c.name
                nr("no") = dr2(c.name)
            End  If
        Next
    End If
Next

--  作者:工匠
--  发布时间:2019/5/5 23:41:00
--  
谢谢老师!