报表是用来向上级报告的表格,其最根本的特点就是“多样格式+动态数据”,在vb.net中的vs编辑器中提供了报表设计器,下面针对机房的结账报表进行探讨。
【界面设计】
报表主窗体的设计并不复杂,主要用到了Reportviewer控件,该窗体很好的将,打印,打印预览,保存等功能进行了很好的封装。如下图:
报表的添加可以从两个方法进行考虑,一是从ReportViewer
另一种点击U层所在的文件夹进行添加:右击添加--新建项--reporting--报表向导。
【建立数据集】
选择创建报表向导后:
选择数据库---数据集---新建连接,下一步:
下一步,选择要使用的数据表、视图或存储过程:
【界面设计】
报表的界面设计利用工具箱里面报表项来添加即可,这里用到了文本框,图表和表。矩形和表有相似的功能,都可以动态的添加
参数问题:
1、自带函数用&表示,如上图中的制表时间。
2、传递参数用@表示,如上图的开始时间和结束时间,实参从实际窗体的代码中实现。
3、数据库中参数[]包围,上图表中的数据均为数据库字段。
4、汇总参数,例如【AllCash】的汇总,右击,添加总计在下一行就自动添加【sum(AllCash)】的汇总项
【代码实现】
代码实现首先要在Reportviewer控件中添加上自己设计的报表:
如果想要更换报表要把下面的数据集删掉以免造成混乱,重新选择数据源,绑定数据。
报表如果没有包含必须从D层获得数据的实参的话在U层添加代码就完全可以完成了,它提供了可以直接与数据库建立连接的select语句生成器:
1.选择上图下面的数据集进行配置
这里有两个函数,一个Fill(填充数据),一个GetData(得到数据),右击击完成select语句配置
点击查询生成器可以对生成的select语句添加添加参数构成查询条件,如下图2:
这样在我们的主窗体load事件中自动生成两行代码:
'TODO: 这行代码将数据加载到表“DateBill.CheckInfo”中。您可以根据需要移动或删除它。 Me.CheckInfoTableAdapter.Fill(Me.DateBill.CheckInfo) ‘将查询内容填充到控件 Me.DR.RefreshReport() ’更新报表操作
有限定条件下,再添加一个按钮,对按钮进行事件编辑:
Dim startDate, endDate As String '获得起始日期 startDate = Format(dtpStart.Value, "yyyy-m-dd") '与报表中的参数类型一致 endDate = Format(dtpEnd.Value, "yyyy-m-dd") '定义报表数据源 Dim rptDateSource = New ReportDataSource '获得报表数据集名称 rptDateSource.Name = "DateBill" '定义报表参数 Dim param As ReportParameter() param = {New ReportParameter("startDate", startDate), New ReportParameter("endDate", endDate) } '添加报表数据源 DR.LocalReport.DataSources.Add(rptDateSource) '传进参数 DR.LocalReport.SetParameters(param) '将生成的两个函数:fill(填充,注意填充上select条件参数:startDate,EndDate) refreshRepot(更新)利用起来 Me.CheckInfoTableAdapter.Fill(Me.DateBill.CheckInfo, dtpStart.Value, dtpEnd.Value) Me.DR.RefreshReport()这样对报表操作算是有了一个简单的完成。
【总结】
对报表学习,充分体会了vs对编程的封装思想,Reportviewer控件把繁琐的打印,保存功能进行了良好的封装,另外还提供对数据库访问的接口,极大的方便了我们的编码旅程。这对日后我们学习底层架构是一个良好的启发。