RDLC报表的使用
机房收费系统这是第三遍重构了,但每当到报表这块都是让我很纠结,这次合作开发亦是如此。在学习vb6时,使用的报表是第三方的Grid++Report;VB.Net个人版以及合作版使用的是在VS .NET自带的报表设计器,Microsoft 将这种报表的后缀定为RDLC.
RDLC(Report Definition Language Client)是微软基于RDL在.NET上继续完善的结果。
下面就以机房收费系统的“账单查询”为例,开始制作一张简单报表,显示结果如下:
一、制作步骤:
1.在建好的VS窗体项目“机房收费系统”建立一个Form窗体:账单查询。
2.添加数据源。
在左边的窗体内选择“添加新数据源”或在菜单上操作选择“添加新数据源“。
选择后出现对话框,选择数据库,进入下一步。
选定数据源后,指定数据库文件,并进行测试,如果连接不通,请检查你的软件配置。
进行下一步,至显示出库文件内的表及视图,然后打开表,并选择其中的T_CheckOut,选择完成。
在数据源窗口中显示出所选择表及表内字段,以备使用。
同时在资源管理器窗口中,也可以看到新增加的数据文件。
3.报表浏览器
在新建的窗体内,放入报表浏览器控件。
4.建立报表文件
选中报表浏览器控件后,在控件的右上角会出现一个小三角,出现一个菜单,选择“建设新报表”或在解决方案资源管理器中添加一个新的报表文件:
设计报表的过程此文写的很详细,不明白的可以参考:VB.NE rdlc报表的使用 ,在此就不赘述。
我的报表模板的最后显示结果如下图:
这里提一下,数据行数据填充,在其“表达式”中可以看到:
4.编码部分(这里只贴了界面层的代码):
Imports System Imports Microsoft.Reporting.WinForms Public Class QueryBillUI Dim myFA As New Facade.BillManagementFA Dim dt As DataTable ''' <summary> ''' 窗体加载事件 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub WeekBillUI_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.ReportViewer1.RefreshReport() Dim num As Integer '获取操作员用户名和真实姓名 dt = myFA.SelectUser() '获取cboUserID集合中的值 cboUserID.Items.Add("所有") '默认值:“所有”,并将其转换为"*" num = dt.Rows.Count '从数据库中读取过来的值。 While num > 0 cboUserID.Items.Add(Trim(dt.Rows(num - 1)("用户名"))) '获取DataTable表中某行某列的值赋给cboUserID集合中 num = num - 1 End While cboUserID.SelectedIndex = 0 '设置组合框的默认值为“所有”。 Me.ReportViewer1.RefreshReport() End Sub '查询 Private Sub btnQuery_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQuery.Click Dim enCheckOut As New Entity.CheckOutEntity Dim strUserID As String '此变量用于保存“用户名” strUserID = cboUserID.Text.Trim() If strUserID = "所有" Then strUserID = "*" End If enCheckOut.UserID = strUserID enCheckOut.BeginDate = Format(dtpStartDate.Value, "yyyy-MM-dd") enCheckOut.EndDate = Format(dtpEndDate.Value, "yyyy-MM-dd") Try dt = myFA.QueryBill(enCheckOut) Catch ex As Exception MessageBox.Show(ex.Message.ToString()) Return End Try '声明一个报表数据源对象 Dim rptDataSource As New ReportDataSource '设置报表数据源名称 rptDataSource.Name = "T_CheckOut" '设置报表数据源实例 rptDataSource.Value = dt '设置嵌入报表的资源的名称 'ReportViewer1.LocalReport.ReportEmbeddedResource = "UI.ReportBill.rdlc" ReportViewer1.LocalReport.ReportEmbeddedResource = "ReportBill.rdlc" '清空数据源 ReportViewer1.LocalReport.DataSources.Clear() '添加报表数据源 ReportViewer1.LocalReport.DataSources.Add(rptDataSource) '设置报表中的参数集合,传递的参数,名字大小写必须一致。 '且其本身数据类型必须与报表中定义的数据类型也必须一致。 'Dim params() As ReportParameter = {New ReportParameter("DateStart", Date.Parse(dtpStartDate.Text)), New ReportParameter("DateEnd", Date.Parse(dtpEndDate.Text))} Dim params() As ReportParameter = {New ReportParameter("DateStart", dtpStartDate.Text), New ReportParameter("DateEnd", dtpEndDate.Text), New ReportParameter("UserID", LoginUI._userID)} '传递报表中的参数集合 ReportViewer1.LocalReport.SetParameters(params) '刷新报表 Me.ReportViewer1.RefreshReport() End Sub End Class
二、运行结果
程序执行后,界面的运行结果如下图:
此文重点部分介绍的是“配置数据源”和“建立报表文件”中的参数设定。因为个人在这两部分理解不是很好,所以这次总结在这两部分画的笔墨有些多。
参考的文献:
崔成龙— VB.NET rdlc报表的使用:http://blog.csdn.net/xiaoxian8023/article/details/7106588
杨长收—VB.NET实现ReportViewer显示参数化查询结果:http://blog.csdn.net/a1314517love/article/details/7320672
邢金聪—图解机房收费系统报表制作的全过程:http://blog.csdn.net/xjc1278003262/article/details/10077633