【个人机房重构】——报表ReportViewer

前言:在机房个人重构的过程中,报表算是一个比较难弄的地方。之前做VB版机房收费系统用的报表是Grid++Report,这次VB.NET重构中用到了VisualStudio自带的报表控件—ReportViewer。刚着手去做的时候,根本不知道如何下手,后来站在巨人的肩膀上,终于缕出点眉目了。


       在VB版的机房收费系统中,报表应该是每个人心中的噩梦。要不是弄不出来,要不就是弄出来了,里边的数据也不对。那么,到我们现在的VB.NET版机房收费系统中,这个像噩梦一样存在的东西,又应该是什么样的呢?


设计报表的具体步骤:


1、首先,添加报表控件:ReportViewer


2、添加和编辑编辑RDLC文件:

    ①点击ReportViewer右上的三角,选择“设计新报表”




   ②在“报表向导”中,我们可以重命名数据集的名称,然后选择数据源新建




  ③然后在“配置数据源向导”中,选择数据库,一直“下一步”点下去




④在“选择您的数据连接”中,选择“新建连接”




⑤在“添加连接”中,进行数据源的设置




⑥然后选择“是”之后,会出现下边的对话框,直接点下一步即可




⑦在“选择数据库对象”中,选择你报表需要用到的数据库中的表




⑧点击“完成”后,会回到“报表向导”的对话框,然后点击下一步即可




在这里,直接把需要的字段(报表中的字段)按顺序拖入到“值”即可。




⑩下边是我设计好的报表




其中,在报表中的一些细节:标题、参数、时间等


添加文本框添加标题 “机房收费系统结账汇总” 就是在【工具箱】中加入文本框就可以。

添加内置字段如下图,制表日期就是报表中自带的函数,可以在【报表数据】的内置字段中添加。然后右击选择表达式,可以对其设定属性

参数:可以自己进行添加


















然后在报表窗体上,在报表控件ReportViewer的右上方,点击三角




至此,整个报表的设计就算完成了。


下边是代码部分(报表刷新部分的U层代码)


'********************************************** 
' 文 件 名:frmDayAmount
' 命名空间:UI
' 内    容:
' 功    能:报表
' 文件关系:
' 作    者:杨晨光
' 小    组:
' 生成日期:2014/9/3 16:16:11
' 版 本 号:V1.0.0.0
' 修改日志:
' 版权说明:
'**********************************************
Imports System
Imports Microsoft.Reporting.WinForms
Public Class frmDayAmount

    Private Sub frmDayAmount_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: 这行代码将数据加载到表“ChargeSystemDataSet.T_DayAmount”中。您可以根据需要移动或删除它。
        Me.T_DayAmountTableAdapter.Fill(Me.ChargeSystemDataSet.T_DayAmount)

        Me.ReportViewer.RefreshReport()
    End Sub
    '刷新报表
    Private Sub btnR_Click(sender As Object, e As EventArgs) Handles btnR.Click
        '定义两个变量,把时间赋值给它们
        Dim StartTime As String = Format(DtpStart.Value, "yyyy-MM-dd")
        Dim EndTime As String = Format(DtpEnd.Value, "yyyy-MM-dd")

        '判断两个时间的大小
        If StartTime > EndTime Then
            MsgBox("起始时间不能超过终止时间,请重新选择!", MsgBoxStyle.Exclamation, "警告")
            Exit Sub
        End If

        Dim myList As List(Of Entity.DayAmountEntity)   '定义一个泛型集合,用来承载返回的数据
        Dim BUser As New BLL.DayAmountBLL               '实例化B层的一个新对象
        myList = BUser.Check(StartTime, EndTime)        '调用B层的方法,并将两个时间变量传给它

        '返回的泛型集合为0,则里边没有东西
        If myList.Count = 0 Then
            MsgBox("这段时间内没有您要的查询内容,请重新选择时间!", MsgBoxStyle.Exclamation, "警告")
            Exit Sub
        Else

            '声明一个报表数据源对象  
            Dim rptDateSource = New ReportDataSource
            '设置报表数据集名称  
            rptDateSource.Name = "DataSetAmount"
            '设置报表数据源实例  
            rptDateSource.Value = myList
            '设置嵌入报表的资源名称  
            ReportViewer.LocalReport.ReportEmbeddedResource = "UI.Report1.rdlc"
            '清空报表数据源  
            ReportViewer.LocalReport.DataSources.Clear()
            '添加报表数据源  
            ReportViewer.LocalReport.DataSources.Add(rptDateSource)

            '刷新报表  
            Me.ReportViewer.RefreshReport()
        End If

    End Sub
End Class


B层、D层的代码在此省略。


总结


    虽然报表做完了,但是我还是有些疑问。这样的设计出来报表,直接跟数据源打交道,从而违背了三层架构的思想。但是,使用别的方法吧,还不会。所以只好妥协,采用这种方法。

    其实,整张报表做完,发现也没有想象中的那么难。有时候,有些事情,只要迈开第一步,放手去做,你会发现,原来世界也是挺美好的,因为你已经成功了一半了。


评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值