Foxtable(狐表)用户栏目专家坐堂 → 数据库中的表能否使用excel模板直接打印


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

主题:数据库中的表能否使用excel模板直接打印

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
数据库中的表能否使用excel模板直接打印  发帖心情 Post By:2011/5/19 15:36:00 [只看该作者]

希望直接打印sql server 或access数据库中的表,如果在foxtable中未引用表内容和结构,能否直接使用模板打印?

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57640 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/5/19 16:14:00 [只看该作者]

后台可以直接打印的,不用模板.

打印后台数据

还记得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()

 


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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2011/5/19 16:28:00 [只看该作者]

我的报表要求是固定格式的,不是数据表格式
[此贴子已经被作者于2011-5-19 16:30:26编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/5/19 16:30:00 [只看该作者]

没有引用的目前不可以。


 回到顶部