vb.net 水晶报表的步骤与经验教训
ADO.NET 数据集制作报
从数据库创建数据集对
1. 在项目中新建一个架构文件:
a. 在解决方案资源管理器中,右击项目名,指向“添加”,然后单击“添加新项”
b. 在“添加新项”对话框的“类别”区域,展开文件夹,然后选择“数据”
c. 在“模板”区域选择“数据集”
d. 接受默认名称 Dataset1.xsd
这就创建了一个新的架构文 (Dataset1.xsd),以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中
注意一下:我做的时候将上述的引进的数据集,改成了汉字,这种做法是不正确的,正确的做法是,在这不用改
2. 指定数据库位置:
a. 在服务器资源管理器中,右击“数据连接”并选择“添加连接”
b. 在“数据链接属性”对话框中,单击“提供程序”选项卡,然后选择一个提供程序(例如 Microsoft OLE DB Provider for SQL Server)
c. 单击“连接”选项卡,然后指定您的数据库所在位置。在所需位置输入服务器和登录信息
d. 单击“确定”按钮
此时,您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面
3. 在解决方案资源管理器中,双击 Dataset1.xsd (如果它尚不是活动视图)
Dataset1.xsd 现在应显示在“数据集”选项卡中
4. 若要为数据集建立架构,请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上
5. 单击“保 Dataset1.xsd”来保存“Dataset1.xsd”文件
6. 在“生成”菜单上,单击“生成”为项目生成数据集对象
ADO.NET 数据集对象提供数据的描述,从它可以向 Crystalreport 添加表。使 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表
注意一下:······添加表以后更改页眉的题目时,应该单击右键在编辑文本这显示你想要的标题
请在使用“报表专家”创建新报表时调用“数据库专家”。或者,要从一个已经使 ADO.NET 建立好的报表中访问“数据库专家”,请在 Report Designer 中右击,指向“数据库”,然后单击“添/删除数据库”
将报表连接到 ADO.NET 数据集对
1. 在“数据库专家”中,展开“项目数据”文件夹
2. 展开“ADO.NET 数据集”文件夹
3. 选择所需数据集对象
例如,如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象,则应该选择“WindowsApplication1.Dataset1”
4. 选择要向报表中添加的表,和使用其他数据源一样
五、动态改变数据源的代
Dim dsdataSet As New DataSet()
Dim oRpt As New rptClient() '已建立的报表rptClient
请读者自行填充数据集dsdataSet
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet.Tables(0))
' 将带有数据的报表对象绑定 Windows 窗体查看器,rptVew(CrystalReportViewer控件
rptVew.ReportSource = oRpt
注意 FillDataSet 方法可连接到指定的数据库,提取数据,然后断开数据库连接。如果您希望将数据库中的多个表添加到报表中,请使 SQL JOIN 语句将这些表联接在一起;然后 FillDataSet 方法中指定一个结果表
六、创建主从报
在报表中,有许多报表是主从表结构,比如订单与订单商品明细,订单是一个表中的一条记录,而分录是另一个表中的多条记录,两个表通过一个字段关联起来,这种报表可利用其分组功能实现
1. 新建一个工
2. 往FORM1中添加一个CrystalReportViewer控件
3. 在服务噐资源管理器中连接到SQL SERVER 2000上的Northwind数据
4. 添加一个数据集Dataset1,将服务器资源管理器中的Orders Order Details加入到数据集中
5. 添加一个水晶报表,使用报表专家,在项目数据中选择“ADO.NET数据集”,插入表Orders Order Details,“链接”中是关联字段的链接,在“字段”中选择要显示的主表和明细表的字段,组中选择分组依据为Orders表OrdersID字段,总计,图表,选择(可进行筛选),样式(可设置报表标题),可自行设置。设置完后,点击完成
6. 在报表设计器中调整需要显示的字段的位置、宽度等
7. 在窗口中添加代码
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim oRpt As New CrystalReport1()
Dim dsdataSet As New Dataset1()
Dim CN As New Data.SqlClient.SqlConnection( "data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa ")
CN.Open()
Dim daOrders As New Data.SqlClient.SqlDataAdapter( "select * from orders ", CN)
daOrders.Fill(dsdataSet, "orders ")
Dim daDetails As New Data.SqlClient.SqlDataAdapter( "select * from [Order Details] ", CN)
daDetails.Fill(dsdataSet, "Order Details ")
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet)
CrystalReportViewer1.ReportSource = oRpt
/*
Private Sub daywaterlevel_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'创建一个内含连接信息的数据库链接对
Dim myConnection As New SqlConnection
myConnection.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;database=cwfzx;server=yllsony;Connect Timeout=30 "
'定义一个报表对
Dim myreportDoc As New ReportDocument
Dim myDBConncetionInfo As ConnectionInfo
Dim myTable As Table
'循环处理Tables集合中的每一个Table对象并设置登陆信
For Each myTable In myReportDoc.Database.Tables
myDBConncetionInfo = myTable.LogOnInfo.ConnectionInfo()
With myDBConncetionInfo
.ServerName = "yllsony "
.databaseName = "cwfzx "
.UserId = "sa "
.Password = "636490 "
End With
Next
'定义一个sqldataAdapter类型的变
Dim MyCommand As SqlDataAdapter
'创建数据集对
Dim ds As DataSet = New dsDayWater
'创建一个SqlDataAdapter对象
MyCommand = New SqlDataAdapter( "select stcd,tm,z from tb_river_r ", myConnection)
'链接到数据库,提起数据,然后中断链接
MyCommand.Fill(ds, "tb_river_r ")
'载入报表
myReportDoc.Load(Application.StartupPath & "\crdaywater.rpt ")
'将数据集ds传递给报表对象
myReportDoc.SetDataSource(ds)
'绑定报表查看器控
CrtViewerWater.ReportSource = myReportDoc
End Sub
*/
/*
Private Sub BindReport()
Dim myConnection As New SqlClient.SqlConnection()
myConnection.ConnectionString = "Server=主机名或者是你的ip地址(本127.0.0.1;database=数据库名;uid=用户;pwd=密码"
Dim myCommand As New SqlClient.SqlCommand()
myCommand.Connection = myConnection’定义连
myCommand.CommandText = "Select * from....." '这里的sql语句就看你的需要来构造了
myCommand.CommandType = CommandType.Text
Dim myDA As New SqlClient.SqlDataAdapter()
myDA.SelectCommand = myCommand
Dim myDS As New Dataset1()
myDA.Fill(myDS, "Stores")
Dim oRpt As New CrystalReport1()
oRpt.SetDataSource(myDS)
CrystalReportViewer1.ReportSource = oRpt
End Sub
*/
📱 扫码关注公众号
扫描二维码关注我们,获取更多精彩内容
实时更新 · 干货满满