后台可以直接打印的,不用模板.
打印后台数据
还记得SQLCommand吗?还记得SQLCommand的ExecuteReader方法吗?
有了ExecuteReader,我们可以直接利用SQL查询语言取得后台数据,得到一个临时的DataTable,使得打印后台数据成为可能:
本节同样要直接打印出2009年6月的订单:
Dim doc As New PrintDoc
Dim rt As New prt.RenderTable
Dim cmd As New SQLCommand '定义一个SQL命令
Dim
dt As
DataTable
'定义一个数据表变量
Dim
Count As
Integer = 0
cmd.CommandText = "Select * From {订单} Where Year(日期) = 2009 And Month(日期) = 6"
dt = cmd.ExecuteReader() '生成一个临时表
For
Each Col AS
DataCol In
Dt.DataCols
rt.Cells(0,Count).Text = Col.Name
For r As
integer =
0
To dt.DataRows.Count - 1
rt.Cells(r +1,Count).Text =
dt.DataRows(r)(Col.Name)
Next
Count = Count + 1
Next
rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) '灰色网格线
rt.CellStyle.Spacing.All =
1
'内容距离网格线1毫米
rt.Rows(0).Style.TextAlignHorz =
prt.AlignHorzEnum.Center '第一行内容水平居中
doc.Body.Children.Add(rt)
doc.Preview()
其实上面的代码,是一个通用SQL查询结果打印程序,你要做的只是修改SQL语句来用于不同的统计。
CrossTableBuilder和CrossTableBuilder提供了强大的统计功能,这两个类都有一个FromServer参数,只要设为True,将对后台数据进行统计。
这两个类的Build方法有一个可选参数,如果设为True,将只生成一个临时的DataTable,而不生成Table。
这样我们就可以直接统计并打印后台数据,而不需要首先在界面中显示统计结果:
Dim dt As DataTable
Dim
g As New
GroupTableBuilder("统计表1",
DataTables("订单"))
g.Groups.AddDef("产品")
g.Totals.AddDef("数量")
g.FromServer = True
dt = g.Build(True)
Dim doc
As New
PrintDoc
Dim rt
As New
prt.RenderTable
Dim
Count As
Integer = 0
For
Each Col AS
DataCol
In Dt.DataCols
rt.Cells(0,Count).Text = Col.Name
For r As
integer = 0
To dt.DataRows.Count - 1
rt.Cells(r +1,Count).Text = dt.DataRows(r)(Col.Name)
Next
Count = Count + 1
Next
rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
rt.CellStyle.Spacing.All = 1
rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center
doc.Body.Children.Add(rt)
doc.Preview()