Foxtable(狐表)用户栏目专家坐堂 → 请教:分组报表问题


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

主题:请教:分组报表问题

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


加好友 发短信
等级:童狐 帖子:278 积分:2909 威望:0 精华:0 注册:2013/8/28 22:21:00
请教:分组报表问题  发帖心情 Post By:2015/5/8 11:03:00 [只看该作者]

做了个物资计划的分组报表,按照工程名称和计划编号生成报表,现在出现的问题是:计划明细中材料没有按照分组分开,而是在每个报表中都打印了一遍,另外两个计划没有分成两页,想实现一个计划打完后自动补空行,在下一页打印另一个计划。请老师给修改一下代码,谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目8.foxdb


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/8 12:52:00 [只看该作者]

'''
Dim g As New CrossTableBuilder("物资统计表", DataTables("物资需求计划明细"))
g.HGroups.AddDef("项目名称","工程项目名称")
g.HGroups.AddDef("计划编号")
g.HGroups.AddDef("材料名称","物资名称")
g.HGroups.AddDef("规格型号","技术要求条件")
g.HGroups.AddDef("单位")
g.HGroups.AddDef("备注")
g.VGroups.AddDef("单位工程名称")
g.Totals.AddDef("数量", "数量")
g.filter = Tables("物资需求计划明细").filter
g.HorizontalTotal = True
g.Build()

Tables("物资统计表").Cols("合计").Move(5)
Tables("物资统计表").Cols("备注").Move(Tables("物资统计表").cols.Count-1)

Dim doc As New PrintDoc
Doc.PageSetting.LeftMargin = 20 '设置左边距
Doc.PageSetting.RightMargin = 15 '设置右边距
Doc.PageSetting.TopMargin = 15 '设置上边距
Doc.PageSetting.BottomMargin = 15 '设置下边距
Dim rt As Prt.RenderTable
Dim rm As New prt.RenderImage() '定义一个图片对象
rm.Image = GetImage(ProjectPath & "images\中国中铁.png") '请改为实际的图标名称和路径
rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center '图片水平居中
rm.Style.ImageAlign.AlignVert = prt.ImageAlignVertEnum.Center '图片垂直居中

Dim tbl As Table = Tables("物资统计表")
Dim Rows As List(Of DataRow)
Dim Datas As List(Of String()) = tbl.DataTable.GetValues("工程项目名称|计划编号",tbl.Filter)
doc.Pagesetting.LandScape = True


'设置页眉
rt = New prt.RenderTable
rt.Cells(0,0).Text = "主要物资需用限(定)额数量总计划表"
rt.Cells(1,0).RenderObject = rm '将单元格内容设置为图片对象rm
rt.Cells(1,1).Text = "  主要物资需用限(定)额数量总计划表"
rt.Cells(1,2).Text = "表格编号:"
rt.Cells(2,2).Text = "0902"
rt.Cols(2).Width = 60
rt.Cols(0).Width = 16
rt.Cells(1,1).Style.TextAlignvert = prt.AlignVertEnum.Center
rt.Cols(2).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.Cols(2).Style.TextAlignvert = prt.AlignvertEnum.Center
rt.rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center
'设置合并单元格
rt.Cells(0,0).Spancols = 3 '第1行第5个单元格向下合并6行(用于显示照片)
rt.Cells(1,1).Spanrows =2  '第5行第2个单元格向右合并3列(用于显示地址)
rt.Cells(1,0).Spanrows =2  '第5行第2个单元格向右合并3列(用于显示地址)
rt.Rows(1).Height = 8
rt.Rows(2).Height = 8
rt.Style.Gridlines.All = New prt.Linedef(Color.black) '黑色网格线
rt.CellStyle.Spacing.Bottom = 0.5 '底端内容缩进0.5毫米
rt.Style.FontSize = 12 '字体大小为8磅
rt.Cells(0,0).Style.FontSize = 18 '字体大小为8磅
rt.Cells(0,0).Style.FontBold = True '字体加粗
rt.Rows(0).Style.Borders.All = New prt.LineDef("0mm", Color.white) '去掉第二行的网格线
rt.Rows(0).Style.Borders.Bottom = New prt.Linedef  '恢复第二行底端的网格线
rt.cols(0).Style.GridLines.right = New prt.Linedef("0mm", Color.white)  '去掉第一行底端的网格线
Doc.PageHeader = rt '作为页眉使用

'设置页脚
rt = New prt.RenderTable
rt.Cells(0,0).Text = "技术负责人:"
rt.Cells(0,2).Text = "审核人:"
rt.Cells(0,4).Text = "编制人:"
rt.Cells(0,6).Text = "物资部接收人:"
rt.Cells(0,8).Text = "日期:       年     月     日"
rt.Cols(6).Width = 30
rt.Cols(8).Width = 40
rt.Cols(0).Style.TextAlignHorz = prt.AlignHorzEnum.Left
rt.Cols(8).Style.TextAlignHorz = prt.AlignHorzEnum.right

rt.Style.FontSize = 10 '字体大小为8磅
Doc.PageFooter = rt '作为页脚使用


For j As Integer = 0 To datas.count - 1
    Dim data() As String = datas(j)
    Dim n As Integer = Tables("物资统计表").cols.Count
    rt = New prt.RenderTable
    rt.Style.FontSize = 10
    rt.Style.Spacing.Top = 0
    rt.Style.Spacing.Bottom = 0
    rt.Cells(0, 0).Text = "  工程项目名称: " & Data(0) & "                                                  计划编号: " & Data(1)
    rt.Cells(0,0).Spancols =n-1
    rt.Cells(1, 0).text = "物资编号"
    For i As Integer = 2 To n-1
        rt.Cells(1, i-1).text = Tables("物资统计表").cols(i).Caption
    Next
   
    Dim drs As List(Of DataRow) = DataTables("物资统计表").Select("计划编号 = '" & data(1) & "'")
    For r As Integer = 0 To drs.Count-1
        Dim dr As DataRow = drs(r)
        rt.Cells(r+2, 0).text = r + 1
        For i As Integer = 2 To n-1
            rt.Cells(r+2, i-1).text = dr(Tables("物资统计表").cols(i).name)
        Next
    Next
   
    '补空行
    For i As Integer = drs.Count To 20
        rt.Cells(i+2, 0).text = " "
    Next
    '换页
    If j < Datas.Count - 1 Then
        rt.BreakAfter = prt.BreakEnum.page
    End If
    rt.CellStyle.Spacing.All = 0.5 '单元格内距设为0.5毫米
    rt.Rows(0).Height = 8
    rt.Cols(0).Width = 10
    rt.Cols(3).Width = 15
    rt.Cols(4).Width = 15
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.center '所有文本内容靠右对齐
    rt.Style.TextAlignVert = prt.AlignVertEnum.center '所有文本内容垂直居中
    rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.left '第一行内容水平居中
    rt.RowGroups(0, 2).Header = prt.TableHeaderEnum.All '利用行组功能设置表头
    rt.Style.Gridlines.All = New prt.Linedef(Color.black) '黑色网格线
    rt.Rows(0).Style.GridLines.Vert = New prt.LineDef("0mm", Color.white) '去掉第一行的网格线
    rt.Rows(0).Style.GridLines.Top = New prt.Linedef("0mm", Color.white)  '去掉第一行底端的网格线
   
    doc.Body.Children.Add(rt)
Next

doc.preview()


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


加好友 发短信
等级:童狐 帖子:278 积分:2909 威望:0 精华:0 注册:2013/8/28 22:21:00
  发帖心情 Post By:2015/5/8 14:28:00 [只看该作者]

补空行的代码能够自动判断行数生成吗,毕竟每个计划的零件数量是不固定的,或遇到字数多的会自动加大行高,采取固定的行数不太合适

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/8 15:03:00 [只看该作者]

 不行,行高是无法确定的,要么你就尽量不要填充空白行或少填充一些行。直接用强制换页就好了。

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


加好友 发短信
等级:童狐 帖子:278 积分:2909 威望:0 精华:0 注册:2013/8/28 22:21:00
  发帖心情 Post By:2015/5/8 15:12:00 [只看该作者]

好吧

 回到顶部