水晶报表可以由很多的方法得到,其中一个就是使用VS.Net来创建,它提供了非常丰富模型以使我们能够在运行时操作属性和方法。如果你正在使用VS.Net开发.Net程序,那么你就不需要再安装其它软件了,因为他已经内嵌在VS.Net中了。
VS.Net水晶报表有下面一些主要的优点:
◆快速的报表开发
◆能够导出成为复杂的交互性图表
◆可以与其它控件一起在WebForm中使用
◆能够动态地将报表导出成为.pdf,.doc,xls,html,rtf等多种格式
结构
一些组件组成了水晶报表的二层结构,需要的Web应用有:
客户端:客户端仅需要一个可以访问嵌入aspx页面报表的游览器就可以了
服务器
水晶报表引擎(Crystal Report Engine (CREngine.dll))
通过它可以完成一些任务,如在报告文件中合并数据,转换报告为其它格式等。也正是因为报告引擎的作用,才可以将ASP.NET中的水晶报表转换成为普通HTML格式。
水晶报表设计器(Crystal Report Designer (CRDesigner.dll))
水晶报表就是在设计器中创建的,在设计器中你可以设计标题,插入数据,公式,图表,子报表等。
.rpt报表文件
执行报表中的第一步就是在水晶报表设计器接口创建此报表,在默认安装中微软已经提供了一些现成的.rpt例子。
Data Source
.rpt文件取得数据库的方法取决于你方法的选择,你能选择让水晶报表自己选择数据而不使用任何代码或者也可以选择手动的组装DataSet,然后再将其传送到报表文件。
水晶报表查看控件(Crystal Report Viewer web form Control (CRWebFormViewer.dll))
水晶报表查看控件是一个WebForm控件,可以将它看成是一个在.aspx页面中存放报表的容器。 注意:在一些复杂的操作中,报表服务器与Web服务器可能不在同一物理主机上,Web服务器将HTTP请求传送到报表服务器上去。水晶报表也可以当做WebService来执行。
执行模式
水晶报表取数据可以使用下面的方法实现。
Pull 模式
被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据。
Push 模式
此时开发表不得不自己编写代码连接数据并组装DataSet,同时将它传送至报表。在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化。
报表类型
水晶报表设计器能够直接包含报表至工程也能够使用独立的报表对象。
Strongly-typed 报表:当你将报表文件加入到项目中去时,它就变成了一个了“strongly-typed”报表。在这些情况下,你将拥有直接创建报表的对象的权力,这将减少一些代码并且能够提供一些性能。
Un-Typed 报表:这里的报表并不直接包含在项目中,因此称为‘un-typed’ 报表。在这种情况下,你不得不使用水晶报表的“ReportDocuemt”对象建立一个实例,
并且“手动”地凋用报表。
其它注意事项
尽管水晶报表查看器拥有一些很酷的功能,如缩放、页面导航等。但是他不提供打印功能,你不得不调用游览器的打印功能。
vb 水晶报表打印
vb里面的水晶报表打印控件:CrystalReportViewer
用到的dll文件:
水晶报表打印其实很简单,只要创建报表对象,再对其传递数据就可以打印出来。当然所传递的数据要与水晶报表设计里面的数据一致:
Public Overloads Sub ShowDialog(ByVal netDs As DataSet, ByVal strPath As String, Optional ByVal showPrint As Boolean = True, Optional ByVal showExport As Boolean = True) Try If netDs.Tables(0).Rows.Count > 0 Then Dim rpt As New ReportDocument rpt.Load(strPath) rpt.SetDataSource(netDs) CRV.ReportSource = rpt CRV.ShowPrintButton = showPrint CRV.ShowExportButton = showExport Dim t As New ComboBox t.Visible = True ShowDialog() Else MsgBox("Not print Data!", MsgBoxStyle.Critical) End If Catch ex As Exception MsgBox(ex.ToString) End Try End Sub
调用例子:在其他设计界面,当要打印之时,直接传递参数到打印界面即可。
Dim daOM As SqlDataAdapter Dim cmbOM As SqlCommandBuilder Dim dsOM As New DataSet Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try daOM = New SqlDataAdapter("select top 5 * from facd321 ", GetConn) cmbOM = New SqlCommandBuilder(daOM) daOM.Fill(dsOM, "OM") With dg .DataSource = dsOM.Tables("OM") .WindowLaguage = myDataGrid.myDatagrid.LanguageType.English .FilterBar = True Dim ii As Int16 For ii = 0 To .Splits(0).DisplayColumns.Count - 1 .Splits(0).DisplayColumns(ii).Locked = True Next End With Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error") End Try End SubPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Me.Cursor = Cursors.WaitCursor Dim f As New Form1 AddBarcodeImages(dsOM.Tables(0)) f.ShowDialog(dsOM, Application.StartupPath & "\Reports\bundle.rpt") Catch ex As Exception MsgBox(ex.ToString) Finally Me.Cursor = Cursors.Default End Try End Sub
报表设计:
运行效果:
vinson