經過了VB版機房收費系統的學習,相信現在說起報表,我們已經不再覺得陌生。VB打印報表的功能是通過引用第三方控件來實現的,而相對的VS就在VB的基礎上完善了這一功能,VS自帶報表控件和打印功能,這樣就給我們這些編程者帶來了很大的方便。下面就將我做程序的一些小經歷來跟大家一起分享一下。
1,我們右擊U層所在文件夾添加“新建項”。
2,在彈出的的添加新建項窗口中找到“reporting”,在右面的內容窗口中選中“報表”選項,設置報表的名稱。
3,點擊確定後,顯示如下界面。我們可以通過“報表數據”內的選項設置一些內置字段、參數等信息。如果界面不顯示“報表數據”窗口, 可以通過“視圖”——“報表數據(最後一項)”或者“Ctrl+Alt+D”來打開數據窗口。
4,在上圖的“報表數據”窗口中選擇“新建”——“數據集”,進入下圖界面。選中“數據庫”,下一步,,選中“數據集”,進入“數據源設置向導”窗口。
5,點擊“新建連接”,在“添加連接”對話窗口中設置服務器名、用戶名、密碼、連接到的數據庫等信息,然後點擊“測試連接”,出現“測試連接成功”,然後確定,一直下一步。
6,給數據集添加需要應用的數據庫對象,表、視圖、存儲過程等等。這裡只用到了表,然後確定。
7,添加完成數據庫對象後添加的相應信息顯示如下界面。可以修改數據集名稱。
8,設置完以上步驟後即可在“報表數據”窗口中看到新建的數據集信息了。
9,接下來就是設計報表格式了。打開左側的工具箱,可以看到圖示的“報表項”,文本框、表、矩陣、列表等等。如果沒有工具性選項卡,可以“Ctrl+Alt+X”快捷打開。文本框用於顯示文字、傳遞參數。表和矩陣則可以用來存放數據。不同的是表是針對於“列數固定、行數可變的數據”設計的,而矩形則是針對於“列數與行數均可變”的聚合數據設計的。
10,根據功能要求,設計完的報表界面如圖所示,因此這裡需要用到的工具是“表”。從表中可以看出,我們最後需要打印的是單條記錄的信息,而機房中我們得到的都是整張表的信息,二者的區別在於:在報表綁定數據庫的時候綁定的是指定的記錄還是整張表。
11,首先在工具箱中選中工具“表”拖動到報表窗口中。由上圖我們可以看到,不同於以前報表的是,格式發生了變化,其實很簡單,只需合並單元格就可以了。例如,標題欄,選中標題欄所在行的所有列,鼠標右擊,選中“合並單元格”就OK啦~~~在需要顯示文本內容的列中直接雙擊輸入信息即可,需要加載數據庫信息的列點擊右上角的數據集小圖標即可自動加載相應的數據集信息,然後依次選中相應的信息選項即可。到此,報表就算是設計完了。接下來就是打印了。
13,首先在項目中新建一個windows窗體,在左側的工具箱中“報表”文件夾下找到“ReportViewer”選中並將其拖放到窗體上,調整合適的大小與位置。
14,具體代碼實現打印過程:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient ; using Microsoft.Reporting.WinForms; using System.Configuration; using LRepairBill; namespace RepairBill.UI { public partial class ReportPrint : Form { public ReportPrint() { InitializeComponent(); } private void ReportPrint_Load(object sender, EventArgs e) { reportViewer1.Clear(); string bill_Num = CheckBill.str; string connstring = "server=.;database=Repair;uid=sa;pwd=123456"; SqlConnection conn = new SqlConnection(connstring); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "select*from repair_table where bill_num=@Bill_Num"; cmd.Parameters.Add(new SqlParameter("@Bill_Num", bill_Num)); conn.Open(); cmd.ExecuteNonQuery(); DataTable dt = new DataTable(); try { System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data.SqlClient.SqlDataAdapter(cmd); ada1.Fill(dt); } finally { conn.Close(); cmd.Dispose(); conn.Dispose(); } ReportDataSource rds = new ReportDataSource("DataSet1", dt); this.reportViewer1.LocalReport.DataSources.Clear(); this.reportViewer1.LocalReport.DataSources.Add(rds); //為報表浏覽器指定報表文件 this.reportViewer1.LocalReport.ReportEmbeddedResource = "RepairBill.UI.RepairReport.rdlc"; //指定數據集,數據集名稱後為表,不是DataSet類型的數據集 this.reportViewer1.RefreshReport(); //reportViewer1.clear(); //this.reportViewer2.RefreshReport(); }
特別需要注意的是,在為報表浏覽器指定報表文件時,如果不確定到底該怎麼寫,可以通過以下路徑來確定,如果此處出現錯誤,可能會提示N種報錯信息,為了節省時間,所以一開始就要仔細確認好。
通過這次的總結,再次驗證了“學習是一個反復的過程”。這裡,只跟大家分享了我用到的部分和遇到的一些問題,更多的知識還需要大家自己去學習和運用。也希望大家來一起交流,一起積累,一起進步。