Foxtable(狐表)用户栏目专家坐堂 → 水平结构的表需要用动态的方式转换为垂直结构的表


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

主题:水平结构的表需要用动态的方式转换为垂直结构的表

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


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
水平结构的表需要用动态的方式转换为垂直结构的表  发帖心情 Post By:2019/1/12 16:45:00 [只看该作者]

帮助中
转换代码为

Dim dtb As New DataTableBuilder("表B")
dtb
.AddDef("班级", Gettype(String), 4)
dtb
.AddDef("姓名", Gettype(String), 10)
dtb
.AddDef("科目", Gettype(String), 10)
dtb
.AddDef("分数", Gettype(Double))
dtb
.Build()
Dim
kms() As String = {"语文","数学","英语","物理","化学"}
For Each dr1 As DataRow In DataTables("成绩表"
).DataRows
    For Each km As String In kms
        Dim dr2 As DataRow = DataTables("表B").AddNew()
        dr2("班级") = dr1("班级")
        dr2("姓名") = dr1("姓名")
        dr2("科目") = km
        dr2("分数") = dr1(km)
    Next

Next
MainTable
= Tables("表B")

SQL语句实现



这两种方式水平列都是要用固定值罗列出来,不能像垂直表转成水平表一样用动态代码?


Dim dtb As New DataTableBuilder("B")
dtb.AddDef(
"姓名", Gettype(String), 32)
For Each
v As String In DataTables("A").GetValues("课程")
   
dtb.AddDef(v, Gettype(Double))
Next

dtb.Build()

For Each
v As String In DataTables("A").GetValues("姓名")
   
Dim dr1 As DataRow = DataTables("B").AddNew()
    dr1(
"姓名") = v
   
For Each dr2 As DataRow In DataTables("A").Select("姓名 = '" & v & "'")
       dr1(dr2("课程")) = dr2("分数")
   
Next
Next
MainTable = Tables(
"表B")


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/12 17:16:00 [只看该作者]

当然可以,既然知道有这种用法,照着套用呗。

Dim kms() As String = {"语文","数学","英语","物理","化学"}
改为使用GetValues获取不就行了

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


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
  发帖心情 Post By:2019/1/14 8:58:00 [只看该作者]

要是真能这样写就好了
图片点击可在新窗口打开查看此主题相关图片如下:111.png
图片点击可在新窗口打开查看

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


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

改成比如

 

Dim kms As New List(of String)
For i As Integer = 2 To Tables("表A").Cols.count-2
    kms.add(Tables("表A").Cols(i).name)
    msgbox(Tables("表A").Cols(i).name)
Next


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


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
  发帖心情 Post By:2019/6/10 15:09:00 [只看该作者]

帮助中
转换代码为

Dim dtb As New DataTableBuilder("表B")
dtb
.AddDef("班级"Gettype(String), 4)
dtb
.AddDef("姓名"Gettype(String), 10)
dtb
.AddDef("科目"Gettype(String), 10)
dtb
.AddDef("分数"Gettype(Double))
dtb
.Build()
Dim
 kms() As String = {"语文","数学","英语","物理","化学"}
For Each dr1 As DataRow In DataTables("成绩表"
).DataRows
    For Each km As String In kms
        Dim dr2 As DataRow = DataTables("表B").AddNew()
        dr2("班级") = dr1("班级")
        dr2("姓名") = dr1("姓名")
        dr2("科目") = km
        dr2("分数") = dr1(km)
    Next

Next
MainTable
 = Tables("表B")


接着在后面加一个合计代码,合计分数不显示是怎么回事?

Tables("表B").Cols("分数").GrandTotal = True

Tables("表B").GrandTotal = True '显示合计模式


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


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

 

上传具体项目测试。

 

 


 回到顶部