Foxtable(狐表)用户栏目专家坐堂 → 垂直表和水平表转换


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

主题:垂直表和水平表转换

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/11 17:01:00 [显示全部帖子]

Dim dtb As New DataTableBuilder("表E")
dtb.AddDef("项目", Gettype(String), 32)
For Each v As String In DataTables("表C").GetValues("第一列", "", "_Sortkey")
    dtb.AddDef(v, Gettype(String))
Next
dtb.Build()
For Each dc As DataCol In DataTables("表C").datacols
    Dim dr1 As DataRow = DataTables("表E").AddNew()
    dr1("项目") = dc.name
Next
MainTable = Tables("表E")

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/12 10:36:00 [显示全部帖子]

1、2

 

Dim dtb As New DataTableBuilder("表E")
dtb.AddDef("项目", Gettype(String), 32)
For Each v As String In DataTables("表C").GetValues("第一列", "", "_Sortkey")
    dtb.AddDef(v, Gettype(String))
Next
dtb.Build()

For Each dc As DataCol In DataTables("表C").datacols
    If dc.name <> "第一列" Then
        Dim dr1 As DataRow = DataTables("表E").AddNew()
        dr1("项目") = dc.name
        For Each dr As DataRow In DataTables("表C").datarows
            dr1(dr("第一列")) = dr(dc.name)
        Next
    End If
Next

MainTable = Tables("表E")

 

3、你把临时表导出,然后导入即可。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/12 10:47:00 [显示全部帖子]

3、

 

Dim Builder As New ADOXBuilder
Builder.Open()

If DataTables.Contains("表E") Then
    If DataTables("表E").Type <> 5 Then
        With Builder
            .DeleteTable("表E")
        End With
    End If
    DataTables.unload("表E")
End If

Dim tbl = Builder.NewTable("表E") '创建表
tbl.AddColumn("项目" ,ADOXType.String, 32)
For Each v As String In DataTables("表C").GetValues("第一列", "", "_Sortkey")
    tbl.AddColumn("a" & v,ADOXType.String)
Next
Builder.AddTable(tbl) '增加表
Builder.Close()

DataTables.load("表E")
For Each dc As DataCol In DataTables("表C").datacols
    If dc.name <> "第一列" Then
        Dim dr1 As DataRow = DataTables("表E").AddNew()
        dr1("项目") = dc.name
        For Each dr As DataRow In DataTables("表C").datarows
            dr1("a" & dr("第一列")) = dr(dc.name)
        Next
    End If
Next

MainTable = Tables("表E")


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/12 11:27:00 [显示全部帖子]

以下是引用jamhuton在2016/5/12 11:26:00的发言:
老师我想在后面加一个合计列,因为这里的数据列不断在增加的,这个合计咱就弄不来了

 

代码的最后,你动态加一个临时列,然后计算即可

 

http://www.foxtable.com/help/topics/1428.htm

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/12 11:37:00 [显示全部帖子]

 具体例子发上来测试。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/12 12:48:00 [显示全部帖子]

maintableChanged事件,去掉这些代码,如果要运行,你至少要加上表名判断啊

 

DataTables("茂星业务").DataCols("订单编号").RaiseDataColChanged()


Dim f As New Filler
f.SourceTable = DataTables("订单") '指定数据来源
f.SourceCols = "订单编号,客户简称,出口日期" '指定数据来源列
f.DataTable = DataTables("出口单证") '指定数据接收表
f.DataCols = "Orderno,客户简称,departure_date" '指定数据接收列
f.Fill() '填充数据

Dim g As New Filler
g.SourceTable = DataTables("订单") '指定数据来源
g.SourceCols = "订单编号,品名,数量,出口单价USD" '指定数据来源列
g.DataTable = DataTables("出口明细") '指定数据接收表
g.DataCols = "Orderno,description,quantity,unit_price" '指定数据接收列
g.Fill() '填充数据


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/12 14:21:00 [显示全部帖子]

无语,谁叫你把代码写到datacolchanged事件去啊,单独做一个按钮生成表啊。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/12 15:52:00 [显示全部帖子]

以下是引用jamhuton在2016/5/12 15:23:00的发言:
图片点击可在新窗口打开查看

 

不要在DataColChanged事件写那段代码啊,单独做一个按钮写。


 回到顶部