以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 专业报表换页  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=196568)

--  作者:zcgmxf
--  发布时间:2025/5/13 22:08:00
--  [求助] 专业报表换页
老师,希望班次不同时强制换页,水平有限,弄不好。请指教!谢谢

        Dim tb As Table = Tables("学生体检信息导入_table1")
        Dim ColNames As String() = New String() {"班次", "姓名", "体检编号"} 
        Dim doc As New PrintDoc \'定义一个新报表
        
        \'添加标题
        Dim rt1 As New prt.RenderText \'定义一个文本对象  
        Dim ra As New prt.RenderArea
        rt1.Text = tb.Current("班次") & "班体检名单"
        rt1.Style.Font = New Font("宋体", 14, FontStyle.Bold) \'设置标题字体
        rt1.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'标题水平居中
        rt1.Height = 8 \'高度等于容器高度
        ra.Children.Add(rt1) \'加入到容器中
        doc.Body.Children.Add(ra) \'将容器加入到报表
        
        Dim rt As New prt.RenderTable \'定义一个新表格
        rt.Cols.Count = 3 \'设置列数       
        \' 设置表格行高和列宽
        For i As Integer = 0 To tb.Rows.Count - 1
            rt.Rows(i).Height = 8 \'设置行高
        Next
        If tb.Rows.Count > 30 Then
            rt.Cols(0).Width = 53 \'设置列宽
            rt.Cols(1).Width = 20 \'设置列宽
            rt.Cols(2).Width = 10 \'设置列宽
            \' 设置表格样式
            rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
            rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
            rt.Width = "Auto" \'表格宽度为自动
            rt.Style.Font = New Font("宋体", 11) \'设置表格字体   
            \' 设置分栏
            doc.Columns.Add() \'第一栏
            doc.Columns.Add() \'第二栏
            Doc.Columns(0).Width = 80 \'第一栏的宽度为60毫米
            Doc.Columns(1).Width = 80 \'第一栏的宽度为60毫米
            Doc.Columns(0).Spacing = 10 \'栏间距1毫米
        End If
        
        \' 强制换页
        Dim drs As List(Of DataRow) = tb.DataTable.Select("班次 is not  null")
        For ii As Integer = 1 To drs.Count - 1
            If drs(ii)("班次") <> drs(ii - 1)("班次") Then
                Dim rm As New prt.RenderText \'定义一个文本对象y 
                rm.BreakAfter = prt.BreakEnum.Column \'打印之后另起一栏
                doc.Body.Children.Add(rm) \'加入到报表中
            End If
        Next
        
        \' 逐列设置和填入内容
        For c As Integer = 0 To ColNames.Length - 1
            rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'内容水平居中
            rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'内容垂直居中
            For r As Integer = 0 To tb.Rows.Count - 1 \'开始填入该列内容
                rt.Cells(r, c).Text = tb.Rows(r)(ColNames(c))
            Next
        Next
        
        \' 设置表格样式
        rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) \'灰色网格线
        rt.CellStyle.Spacing.All = 0.5 \'单元格内距设为0.5毫米
        rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中
        \' rt.RowGroups(0, 1).Header = prt.TableHeaderEnum.All \'利用行组,将第一行设为表头
        doc.PageSetting.LeftMargin = 15 \'设置左边距
        doc.PageSetting.RightMargin = 15\'设置右边距
        doc.PageSetting.TopMargin = 15 \'设置上边距
        doc.PageSetting.BottomMargin = 15 \'设置上边距
        doc.Body.Children.Add(rt) \' 将表格加入到报表
        doc.Preview() \' 预览报表

--  作者:有点蓝
--  发布时间:2025/5/13 23:13:00
--  
每个班次要单独一个表格,类似这种:http://www.foxtable.com/webhelp/topics/2409.htm

具体请上传实例测试