天天看點

【.NET機房重構】——rdlc報表的使用

    每次做機房的時候,總會遇到報表的問題;每次遇到報表,又總是會卡在這裡。第一次機房是由于第一次接觸到報表,而且VB也沒有自帶報表設計器,是以隻能用第三方控件來設計報表。這一次VS是自帶了設計器,可是還是卡了,卡在了怎麼用的問題上。經過各種查資料,發現報表其實就是難者不會會者不難。

    在VB中,報表窗體可以分為三部分,窗體、控件、報表,用控件來顯示報表資料,用窗體來承載控件。在VS中也類似,隻不過分為資料庫、控件、報表三部分更為恰當,因為報表是直接連接配接資料集的。以周結賬單舉例,下面是我做的報表,因為資料庫沒有資料,是以顯示的隻是表頭。

【.NET機房重構】——rdlc報表的使用

報表設計

    設計報表之前,首先應該确定你所要的報表是什麼樣式的,都需要些什麼東西。如上圖,需要文本框顯示漢字和時間,還需要一張表來顯示資料庫的内容。另外,既然報表跟資料庫連接配接,那麼它肯定不需要自己輸入資料,也就是說表頭下面的每一欄都對應資料庫表的字段。而且文本框中的時間,同樣也是報表加載時自動顯示的。

    分析好自己需要的東西,就應該設計報表了。在UI層添加報表,進入到報表的設計界面,設計報表所需要的東西都在工具箱中。我做的報表隻使用到了表和文本框,是以講控件拖出來,放到适當的位置。

【.NET機房重構】——rdlc報表的使用

    因為需要報表的文本框顯示起始日期和終止日期,是以需要給報表設定兩個參數,用來接收窗體DateTimePicker控件傳來的日期。

【.NET機房重構】——rdlc報表的使用

    在報表資料中,右鍵單擊參數,添加新參數,設定參數名和類型,我用到的參數名是rptParaA和rptParaB,類型為文本類型。然後就是給文本框指派,右擊文本框,設定文本框屬性,

【.NET機房重構】——rdlc報表的使用

    點選值右邊的函數符号,然後選擇要給文本框賦得值。我用到的是給文本框指派參數和日期時間,

【.NET機房重構】——rdlc報表的使用

設定不同文本框不同的值,這樣報表就可以自動加載你所要的内容。

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>
           

總結

    提到報表的時候,就會覺得報表很複雜,其實真正實作功能的代碼也沒有很多。就像三層一樣,報表同樣是一層一層的傳輸資料,隻不過不像三層那樣形式分明罷了。