Foxtable(狐表)用户栏目专家坐堂 → [求助]从水平表到垂直表


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

主题:[求助]从水平表到垂直表

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


加好友 发短信
等级:二尾狐 帖子:551 积分:5050 威望:0 精华:0 注册:2017/4/20 11:08:00
[求助]从水平表到垂直表  发帖心情 Post By:2019/4/30 16:51:00 [只看该作者]

老师好
请帮看看,这种水平数据表,如何根据选中表A的行(一行或多行),在窗口点击“从表B继承到表D(横向变为纵向)”按钮时,将表D数据表里符合等于表A那些被选择的行内容(编码/品名/规格/备注)进行按需求写到表D数据表,谢谢!

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

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

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


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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


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


加好友 发短信
等级:二尾狐 帖子:551 积分:5050 威望:0 精华:0 注册:2017/4/20 11:08:00
  发帖心情 Post By: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含后续新增加列)不为空值)的行

万分感谢!



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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

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


加好友 发短信
等级:二尾狐 帖子:551 积分:5050 威望:0 精华:0 注册:2017/4/20 11:08:00
  发帖心情 Post By:2019/5/5 23:41:00 [只看该作者]

谢谢老师!

 回到顶部