上一篇说道怎么用报表设计器怎么设置报表模板,现在到了到vb里实现报表了,在报表之前,上一篇文章我们已经加载了部件,引用之后会在控件工具箱中出现两个第三方控件,分别是GRDisplayViewer和GRPrintViewer。把GRDisplayViewer(报表查询显示器)放在窗体上,之后我们就用代码导入模板实现报表了。
我的窗体布局如下图
有刷新,打印,打印预览三个命令按钮。首先在通用中定义
<strong><span style="font-size:18px;"> Dim WithEvents Report As grproLibCtl.GridppReport '实例化报表</span></strong>
WithEvents注意:处理时间源所引发的事件 变量 Report将用于处理对象的事件。可以通过提供类名来指定对象类型,该类是创建这个对象的类。 WithEvents 变量不能是派生对象变量,也就是说不能把它声明为As Object—当声明该变量时必须指定类名。不能把 WithEvents 变量声明为 As New。必须明确地创建事件源对象并将它赋给WithEvents变量。不能在标准模块中声明 WithEvents 变量。只能在类模块、窗体模块以及其它定义类的模块中声明。不能创建WithEvents 变量数组。 下面是刷新按钮中的代码。
<strong><span style="font-size:18px;"> GRDisplayViewer1.Refresh</span></strong>打印预览中的代码
<strong><span style="font-size:18px;"> Report.[Print] (True) '打印,因为报表对象的print方法名与vb的内部定义方法有冲突所以要用中括号</span></strong>下面是Form_Load() 事件中的代码。
<strong><span style="font-size:18px;">Private Sub Form_Load()
Dim strSQL As String, strMsg As String
strSQL = "select * from checkday_info where date= '" & Format(Date, "yyyy-mm-dd") & "'"
Set Report = New grproLibCtl.GridppReport '实例化模版
Report.LoadFromFile (App.Path & "\checkday.grf") '加载模版
Report.DetailGrid.Recordset.ConnectionString = ConnectString() '连接数据源
Report.DetailGrid.Recordset.QuerySQL = strSQL '通过SELECT查询创建记录集
GRDisplayViewer1.Report = Report '将数据赋给GRD的Report
GRDisplayViewer1.Start '开始打印
End Sub
</span></strong>
在这又一次引用了第三方控件,可见vb的编程就是强大。它就像我们前面将vb中的数据导出到Excel里面的操作步骤差不多,还有记录集(Recordset)对象。
Dim xlsApp As Excel.Application它们都是先定义,再赋值,最后执行使用。这几行代码我们之前没有接触过,值得我们好好琢磨琢磨。
Set xlsApp = CreateObject("Excel.Application")