Dim doc As New PrintDoc '定义一个报表
Dim prs As Integer = 10 '每页10行
Dim rx As prt.RenderText '定义一个文本对象
Dim cnt As Integer
Dim tbl As Table = Tables("订单") '绑定数据表
Dim drs As List(Of DataRow) '定义一个行集合
Dim cp As List(Of String) = tbl.DataTable.GetValues("产品",tbl.Filter) '以集合形式,从指定列中获取并返回不重复的值
Dim kh As List(Of String) = tbl.DataTable.GetValues("客户",tbl.Filter) '以集合形式,从指定列中获取并返回不重复的值
For p As Integer = 0 To math.Ceiling(tb.Rows.Count / prs) - 1
Dim rt As New prt.RenderTable '定义一个表格
rt.Width = "Auto" '表格宽度为自动,也就是等于各列设置宽度之和
rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded '表格宽度超出页宽时,可以水平换页
rt.Style.GridLines.All = New prt.LineDef(0.3,Color.LightGray) '线宽0.3mm,深灰色网格线
rt.CellStyle.Spacing.All = 1 '单元格内距设为1毫米
rt.Style.Font = tbl.Font '字体为数据表字体
For c As Integer = 0 To tbl.Cols.Count - 1 '生成列标题
rt.Cells(0,c).Text = tbl.Cols(c).Name '用绑定表的列名作为表格列标题文本
rt.Cols(c).Width = tbl.Cols(c).PrintWidth '数据表列宽为表格列宽
Next
cp = tbl.DataTable.GetValues("产品",tbl.Filter) '返回产品不重复的值
For Each pd As String In cp '分产品打印 msgbox(cp)
kh = tbl.DataTable.GetValues("客户",tbl.Filter & " 产品='" & pd & "'")
For Each pdd As String In kh '分客户打印
Dim Filter = ""
If tbl.Filter > "" Then
Filter = "产品='" & pd & "' and 客户 = '" & pdd & "' And " & tbl.Filter
Else
Filter = "产品='" & pd & "' and 客户 = '" & pdd & "'"
End If
drs = tbl.DataTable.Select(Filter )
cnt = rt.Rows.Count
rt.Cells(cnt, 0).Text = pdd '打印客户的小计
rt.Cells(cnt,5).Text = tbl.Compute("Sum(数量)", "产品='" & pd & "' and 客户 = '" & pdd & "'")
Next
cnt = rt.Rows.Count
rt.Cells(cnt, 0).Text = pd & "合计 " '打印产品的小计
rt.Cells(cnt,5).Text = tbl.Compute("Sum(数量)", "产品 = '" & pd & "'" & IIF(tbl.Filter > ""," and ","") & tbl.Filter)
Next
cnt = rt.Rows.Count
rt.Cells(cnt, 0).Text = "总计 " '打印总计
rt.Cells(cnt, 5).Text = tbl.compute("Sum(数量)")
Next
doc.Body.Children.Add(rt) '将表格加入到报表
doc.preview() '预览报表