以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  水平结构的表需要用动态的方式转换为垂直结构的表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=130083)

--  作者:yetle
--  发布时间: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")


--  作者:有点蓝
--  发布时间:2019/1/12 17:16:00
--  
当然可以,既然知道有这种用法,照着套用呗。

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

--  作者:yetle
--  发布时间:2019/1/14 8:58:00
--  
要是真能这样写就好了
图片点击可在新窗口打开查看此主题相关图片如下:111.png
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间: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
--  发布时间: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 \'显示合计模式


--  作者:有点甜
--  发布时间:2019/6/10 15:33:00
--  

 

上传具体项目测试。