1. 程式人生 > >VB.NET版機房重構---“報表”之旅

VB.NET版機房重構---“報表”之旅

在第一次機房的時候,由於VB沒有自帶的報表,所以我們用的是第三方 的報表控制元件!設計這個報表真是用了我很多的時間!這次重構中,.net版的開發環境VS中就提供了一個現成的報表控制元件,再經過和資料庫的繫結就可以了,不用寫多餘的程式碼,這樣很是方便,所以下面讓我們來見識一下!

第一步: 新增報表控制元件,在工具箱中:
第二步: 我們要明白,這只是添加了一個報表控制元件,而真正的報表我們還沒有繫結到這個控制元件上!接下來就是繫結真正的報表: 右擊U層新增新建項,然後從裡面選擇報表這一項:如圖:
然後得到如下圖的效果:  
第三步:連線資料庫:右擊資料集---新增資料集,便得到下圖:


測試成功後點擊確定,再按著提示一步一步的走:需要注意的是這裡的資料來源名稱是自動生成的,不用管,但是最上面的名稱是自己設定的,必須要記住,在寫查詢按鈕的程式碼的時候會用到,而且作用很大,不信你可以試試!
第四步:右擊新增的報表,選擇表,就會生成一個表的格式,然後根據上圖中的欄位進行填表並挨個選擇資料來源(在表的每個方格的右上角) 就會設計成如下圖的效果:
第五步:這是設計最簡單的報表,不用新增引數,設計好以後會自動在窗體的載入方法中生成一句程式碼:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>Me.SettleAccountsInfoTableAdapter.Fill(Me.MyChargeDataSet.SettleAccountsInfo)
        Me.ReportViewer1.RefreshReport()</strong></span>
這兩句中的最後一句重要,第一句可以根據需要刪除它!這樣當窗體載入後就會自動顯示資料庫表的內容。 但是對於周結賬單,我們要點選查詢按鈕,根據日期控制元件中的內容去查詢資料庫中適合的資料顯示到報表中。右擊報表資料窗體中的引數-----新增引數(本例為:rptStartDate ),再加上下面的程式碼就可以實現此功能了! <span style="font-family:KaiTi_GB2312;font-size:18px;"><strong> Dim selectSA As New Facade.SettleAccountFacade
        Dim dt As New DataTable
        Dim enSettleAccountInfo As New Entity.SettleAccountsEntity
        Dim enSettleAccount As New Entity.SettleAccountsEntity
        enSettleAccount.SAdate = DateTimePicker1.Text.Trim
        enSettleAccountInfo.SAdate = DateTimePicker2.Text.Trim
        '給DataTable賦值  
        dt = selectSA.fSelectSA(enSettleAccountInfo, enSettleAccount)
        '定義報表資料來源  
        Dim rptDataSource As New ReportDataSource
        rptDataSource.Name = "DataSet1"
        rptDataSource.Value = dt
        '說明ReportViewer承載的報表名  
        ReportViewer1.LocalReport.ReportEmbeddedResource = "UI.Report2.rdlc"
        '設定兩個引數的值,這兩個引數是兩個日期引數,通常設定為文字型別的。  
        Dim rptStartDate  As ReportParameter = New ReportParameter("rptStartDate ", DateTimePicker1.Text.Trim)
        ReportViewer1.LocalReport.SetParameters(New ReportParameter() {rptStartDate })
        Dim rptEndDate As ReportParameter = New ReportParameter("rptEndDate ", DateTimePicker2.Text.Trim)
        ReportViewer1.LocalReport.SetParameters(New ReportParameter() {rptEndDate })
        '清空ReportViewer的資料來源  
        ReportViewer1.LocalReport.DataSources.Clear()
        '載入ReportViewer的資料來源為rptDataSource  
        ReportViewer1.LocalReport.DataSources.Add(rptDataSource)
        '重新整理ReportViewer  
        Me.ReportViewer1.RefreshReport()  </strong></span>
可能出現的錯誤:
這個問題的解決就是讓程式碼中rptDataSource.Name 的名字和第三步裡圖片上的名稱(本圖為DataSet1)一樣才行,不然就會出現這個問題! 小結: 這個報表其實有很多方法進行和資料庫的繫結來減少程式碼量,值得我們更深的研究,而且看了崔成龍師哥的部落格後,發現我的報表設計的真不是一般的單調!距離為人民服務還差很遠的距離,看來真是“革命尚未成功,我們需要更加努力啊!”