点击添加,弹出如下对话框:
从上图可以看出创建CrystalReport有三种创建方法:使用报表向导导,这种方式通常是新建模板时使用,点击确认后新建的rpt文件是一个包含报表头,页眉,详细资料,报表尾,页脚的空模板,里面什么都没有,需要自己来创建样式和内容,如果选择来自于现有的报表则会弹出来一个文本选择路径的对话框,找到要作为样板的rpt文件,点击确定即可创建一个原有模板的报表,而且里面的字段数据不会丢失。
我们选择“来自于现有的模板”,其他两种基本制作方法一样大同小异,创建成功后会生成一个原有报表的界面,如图:
,另外我们的工具箱也会有一个Crystal Reports还会多一个字段资源管理器,如图:
我们接下来就是要为报表添加数据源,在左侧或者“视图->其他窗口->数据源”,选择添加新数据源,会弹出如下图:
单击下一步,会弹出:
再单击下一步
选择”新建连接”
填好服务器名,选择好数据库,测试连接没问题的话,单击确定,会回到刚才的窗口,单击下一步,弹出:
选择好你要添加的表或者存储过程,起一个DataSet的名称,单击完成,左侧数据源就会多出我们刚才添加的数据源(如果没有就刷新下)
接下来隐藏数据源,不用再管它,回到报表窗口,
然后我们可以添加文本,例如我们在报表的页眉部分添加一个公司名,在报表上右键“插入”,选择“文本对象”鼠标上会出现一个文本框,我们把这个文本框放到我们想要的地方,给他命名为:“公司名称:”,(也可以插入文本文件,单击文本框,右键选择“自文本插入”,选择要读取的文件即可),右键空白处,选择数据库专家,弹出对话框
最后单击确定(注意一般右侧只能有一个表),
接下来,我们在字段资源管理器中选择我们要放到报表中的字段,如图我们选择companyName字段
报表图中如图(其他字段一样):
好了,报表基本制作完成,现在就创建一个WinForm窗体,窗体创建好后,找到左侧工具栏里面的ReportViewer控件,拖到窗体上,我们的窗体会变成:
如果我们的窗体弹出如下异常,我们就要删除引用里面的画线部分的类库:
接下来我们就是写代码了,
双击在Load事件中写入如下代码:
Public Shared Function Query(ByVal SQLString As String) As DataSet
Using connection As New SqlConnection(connectionString)
Dim ds As New DataSet()
Try
connection.Open()
Dim command As New SqlDataAdapter(SQLString, connection)
command.Fill(ds, "ds")
Catch ex As System.Data.SqlClient.SqlException
Throw New Exception(ex.Message)
End Try
Return ds
End Using
End Function
Private Sub FrmReport_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim sql As String
sql=”select * from outstoragebill” ‘注意这里的sql语句中的列名必须和上面我们创建的字段管理器中的列名相同
Dim ds As DataSet = DbHelperSQL.Query(sqlstr)
Dim count As Int32 = ds.Tables(0).Rows.Count
For i = 1 To 9 - (count Mod 9)
ds.Tables(0).Rows.Add(New Object() {""})
Next
Dim rpt As New CrystalReport1()
'rpt.Load(Application.StartupPath & "RptOutstorage.rpt")
rpt.Load(Application.StartupPath & "../ CrystalReport1.rpt")’这里的‘CrystalReport1是我们刚刚创建的报表名,到此水晶报表制作完成
rpt.SetDataSource(ds.Tables(0))
CrystalReportViewer1.ReportSource = rpt
End Sub
完成后如图所示: