Foxtable(狐表)用户栏目专家坐堂 → 水平转垂直表,多层表头,合计求助


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

主题:水平转垂直表,多层表头,合计求助

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


加好友 发短信
等级:童狐 帖子:261 积分:2189 威望:0 精华:0 注册:2015/5/15 14:51:00
水平转垂直表,多层表头,合计求助  发帖心情 Post By:2020/4/8 15:52:00 [只看该作者]

Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("客户", Gettype(String), 16)
dtb.AddDef("编号", Gettype(String), 16)
Dim prds As List(Of String())
prds = DataTables("订单明细").GetValues("产品名称|规格")
For Each prd As String() In prds
    dtb.AddDef(prd(0)& "_" & prd(1), Gettype(String), 16)
Next
dtb.Build()

For Each cus As String() In DataTables("订单表").GetValues("客户名称|客户编号")
    Dim dr As DataRow = DataTables("统计").AddNew()
    dr("客户") = cus(0)
    dr("编号") = cus(1)
       For Each  prd As String() In prds
        dr(prd(0)& "_" & prd(1))= DataTables("订单明细").Compute("Sum(数量)","客户编号 = '" & cus(1) & "' And [产品名称] = '" & prd(0) & "' And [规格] = '" & prd(1) & "'")
    Next
Next

MainTable= Tables("统计")

Dim doc As New PrintDoc '定义一个新报表
Dim rt As New prt.RenderTable '定义一个新表格
Dim rs As New prt.RenderText

Dim tb As Table = Tables("统计")
Dim hd As Integer = tb.HeaderRows '获得表头的层数
rt.Style.Font = New Font("宋体",11) '设置字体
rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) '灰色网格线
rt.CellStyle.Spacing.All = 0.8 '单元格内距设为0.5毫米
rt.RowGroups(0, tb.HeaderRows).Header = prt.TableHeaderEnum.All '利用行组功能设置表头
tb.CreateReportHeader(rt,False) '生成表头,包括所有列

For c As Integer = 0 To tb.Cols.Count -1 '逐列设置和填入内容
       For r As Integer = 0 To tb.Rows.Count -1 '开始填入该列内容
        rt.Cells(r + hd , c).Text = tb(r,c)
    Next
Next


For ii As Integer= 2 To tb.Cols.Count -1
    For Each Prd As String() In Prds
        rt.Cells(tb.rows.Count+2 ,ii).Text = DataTables("订单明细").Compute("Sum(数量)", "[产品名称] = '" & prd(0) & "' And [规格] = '" & prd(1) & "'")
    Next
Next
doc.Body.Children.Add(rt) '将表格加入到报表
'doc.PageSetting.Landscape = True '横向打印
Doc.PageSetting.LeftMargin = 10 '设置左边距
Doc.PageSetting.RightMargin = 10 '设置右边距
Doc.PageSetting.TopMargin = 10 '设置上边距
Doc.PageSetting.BottomMargin = 10 '设置下边距
doc.Preview()
图片点击可在新窗口打开查看此主题相关图片如下:888.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/8 17:10:00 [只看该作者]

For ii As Integer= 2 To tb.Cols.Count -1
    dim ar() as string = tb.Cols(ii).name.split("_")
        rt.Cells(tb.rows.Count+2 ,ii).Text = DataTables("订单明细").Compute("Sum(数量)", "[产品名称] = '" & ar(0) & "' And [规格] = '" & ar(1) & "'")
Next

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


加好友 发短信
等级:童狐 帖子:261 积分:2189 威望:0 精华:0 注册:2015/5/15 14:51:00
  发帖心情 Post By:2020/4/8 22:44:00 [只看该作者]

追问: 新问题 因为使用了MainTable= Tables("统计")  ,我的主界面使用了模式窗口,窗口中加入窗口的方式 建立 框架,导至打印时 子窗口(绑定的是主表)丢失。如果用build(true)又要求使用datatable,打印代码又不能改动。纠结


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


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/9 9:21:00 [只看该作者]

去掉MainTable= Tables("统计") ,对1楼的代码没有任何影响。

 回到顶部