机房重构之报表制作
在VB.NET中的报表,首先需要一个容器,新建一个项目,新建窗体,然后从工具箱中往窗体上添加这个容器。
容器添加完成,就可以添加报表了,具体操作如下图:
当你在报表中画完表格时,会弹出数据源配置向导,默认数据库,下一步,弹出选择使用哪种类型的数据库模型,默认数据集,下一步,此时弹出选择数据连接。
新建连接,其中第一项是数据源的类型,根据使用的数据库进行选择,第二项是服务器名,这里由于数据库就在本机PC上,故使用我的计算机名称,下面选择使用SQLServer身份认证,用户名和密码,都是自己的数据库登录的用户名和密码。
输完用户名和密码之后,就能够连接到对应的数据库,选择使用的具体数据库的名字,测试连接,连接成功后确定即可。
这里,有一个选项是否在连接字符串中包含敏感数据,选择是或者否都可以,然后下一步,弹出将连接保存到应用程序配置文件中对话框,默认选择的是,下一步即可。
选择数据库对象对话框,里面包含表、视图、存储过程和函数,这里选择所需要的表,单击完成,弹出数据集属性对话框,列出该数据集的具体属性,这里的字段是无法进行添加或者删除的,确定即可。
回到报表设计页面,里面包含了两行的内容,第一行是表头,自定义输入表头既可,就是显示出来的列的标题,第二行是数据,单击右上角数据库图标,选择对应的数据集的属性,也就是具体的字段即可。
这里,在表头的标题中输入文字,显示为小方格,是字体类型的问题,选择一种你想要的字体就可以了。
此外,可以选择文本框,在报表中添加大标题,添加图片等等,选择菜单中的视图,最后一行是报表数据,选择其中的参数,右击添加参数,可以添加日期和时间等等。
这就是VB.NET中报表的制作,非常的简单,多点一点就都会了。
在机房收费系统中,报表中数据的显示,这里是把控件中的两个参数传到了D层,然后,D层返回的是泛型,也就是这个报表的数据源,代码如下,仅供参考:
UI层
'查询 Private Sub btnInquire_Click(sender As Object, e As EventArgs) Handles btnInquire.Click '输入的有效性验证 '起始日期,不能大于终止日期 If DateDiff("d", CDate(myDateTime1.Value), CDate(myDateTime2.Value)) < 0 Then MsgBox("起始日期不能小于终止日期!", vbOKOnly + vbExclamation, "警告") Exit Sub End If '实例化实体类 Dim CheckBill As New Entity.EntityT_CheckBill Dim myCheckBill As New List(Of Entity.EntityT_CheckBill) Dim facade As New Facade.FacadeInquireCheckdayBill Dim Date1 As DateTime Dim Date2 As DateTime Date1 = Format((myDateTime1.Value), "yyyy/MM/dd") Date2 = Format((myDateTime2.Value), "yyyy/MM/dd") myCheckBill = facade.ShowCheckBill(Date1, Date2) '声明一个报表数据源对象 Dim rptDataSource As New ReportDataSource '设置报表数据源名称 rptDataSource.Name = "DataSet1" '设置报表数据源实例() rptDataSource.Value = myCheckBill '设置嵌入报表的资源的名称 myReportView.LocalReport.ReportEmbeddedResource = "UI.ReportCheckdayBill.rdlc" '清空报表数据源 myReportView.LocalReport.DataSources.Clear() '添加报表数据源 myReportView.LocalReport.DataSources.Add(rptDataSource) '设置报表中的参数集合,这里传递的参数,名字大小写必须和报表中的一致 '且其本身数据类型必须与报表中定义的数据类型也必须一致。 Dim params() As ReportParameter = {New ReportParameter("StartDate", Date.Parse(Date1)), New ReportParameter("EndDate", Date.Parse(Date2))} '传递报表中的参数集合() myReportView.LocalReport.SetParameters(params) '刷新报表 Me.myReportView.RefreshReport() End Sub
D层
Public Class SqlServerDALInquireCheckdayBill : Implements IDAL.IDALInquireCheckdayBill '查询账单数据 '直接传参数 Public Function ShowCheckBill(ByVal Date1 As Date, ByVal Date2 As Date) As List(Of Entity.EntityT_CheckBill) Implements IDAL.IDALInquireCheckdayBill.ShowCheckBill Dim Sql As String Dim table As DataTable '实例化SqlHelper Dim helper As New SqlHelper Dim myCheckBill As List(Of Entity.EntityT_CheckBill) '参数必须加@ '不可以直接传,sql语句不识别这些自定义的参数 '必须加上@,sql语句才知道这些是参数 Dim sqlParams As SqlParameter() = {New SqlParameter("@Date1", Date1), New SqlParameter("@Date2", Date2)} Sql = "select*from T_CheckBill where NowDate between @Date1 and @Date2" table = helper.GetDataTable(Sql, CommandType.Text, sqlParams) myCheckBill = ConvertHelper.ConvertList(Of Entity.EntityT_CheckBill)(table) '返回泛型 Return myCheckBill End Function End Class