【.NET机房重构】——rdlc报表的使用

    每次做机房的时候,总会遇到报表的问题;每次遇到报表,又总是会卡在这里。第一次机房是由于第一次接触到报表,而且VB也没有自带报表设计器,所以只能用第三方控件来设计报表。这一次VS是自带了设计器,可是还是卡了,卡在了怎么用的问题上。经过各种查资料,发现报表其实就是难者不会会者不难。


    在VB中,报表窗体可以分为三部分,窗体、控件、报表,用控件来显示报表数据,用窗体来承载控件。在VS中也类似,只不过分为数据库、控件、报表三部分更为恰当,因为报表是直接连接数据集的。以周结账单举例,下面是我做的报表,因为数据库没有数据,所以显示的只是表头。

【.NET机房重构】——rdlc报表的使用_第1张图片


报表设计

    设计报表之前,首先应该确定你所要的报表是什么样式的,都需要些什么东西。如上图,需要文本框显示汉字和时间,还需要一张表来显示数据库的内容。另外,既然报表跟数据库连接,那么它肯定不需要自己输入数据,也就是说表头下面的每一栏都对应数据库表的字段。而且文本框中的时间,同样也是报表加载时自动显示的。


    分析好自己需要的东西,就应该设计报表了。在UI层添加报表,进入到报表的设计界面,设计报表所需要的东西都在工具箱中。我做的报表只使用到了表和文本框,所以讲控件拖出来,放到适当的位置。

【.NET机房重构】——rdlc报表的使用_第2张图片

    因为需要报表的文本框显示起始日期和终止日期,所以需要给报表设置两个参数,用来接收窗体DateTimePicker控件传来的日期。

                                                                                                       【.NET机房重构】——rdlc报表的使用_第3张图片

    在报表数据中,右键单击参数,添加新参数,设置参数名和类型,我用到的参数名是rptParaA和rptParaB,类型为文本类型。然后就是给文本框赋值,右击文本框,设置文本框属性,

                                                          【.NET机房重构】——rdlc报表的使用_第4张图片

    点击值右边的函数符号,然后选择要给文本框赋得值。我用到的是给文本框赋值参数和日期时间,

                                   【.NET机房重构】——rdlc报表的使用_第5张图片

设置不同文本框不同的值,这样报表就可以自动加载你所要的内容。


U层设计

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">''' <summary>
    ''' 实现周结账功能
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnCheckOut_Click(sender As Object, e As EventArgs) Handles btnCheckOut.Click
        '定义B层类
        Dim wBLL As New BLL.WeekCheckBLL
        '定义DataTable盛放数据库数据
        Dim dt As New DataTable
        '给DataTable赋值
        dt = wBLL.SelectData(DateTimePicker1.Text.Trim, DateTimePicker2.Text.Trim)
        '定义报表数据源
        Dim rptDataSource As New ReportDataSource
        '数据源的名称,也就是连接数据库时设置的数据集名称
        rptDataSource.Name = "dsWeekCheck"
        rptDataSource.Value = dt
        '说明ReportViewer承载的报表名
        ReportViewer1.LocalReport.ReportEmbeddedResource = "UI.WeekBill.rdlc"
        '设置两个参数的值
        Dim rptParaA As ReportParameter = New ReportParameter("rptParaA", DateTimePicker1.Text.Trim)
        ReportViewer1.LocalReport.SetParameters(New ReportParameter() {rptParaA})

        Dim rptParaB As ReportParameter = New ReportParameter("rptParaB", DateTimePicker2.Text.Trim)
        ReportViewer1.LocalReport.SetParameters(New ReportParameter() {rptParaB})
        '清空ReportViewer的数据源
        ReportViewer1.LocalReport.DataSources.Clear()
        '加载ReportViewer的数据源为rptDataSource
        ReportViewer1.LocalReport.DataSources.Add(rptDataSource)
        '刷新ReportViewer
        Me.ReportViewer1.RefreshReport()
    End Sub</span></span>



总结

    提到报表的时候,就会觉得报表很复杂,其实真正实现功能的代码也没有很多。就像三层一样,报表同样是一层一层的传输数据,只不过不像三层那样形式分明罢了。



你可能感兴趣的:(.net,重构,报表)