轉載地址https://blog.csdn.net/langwen2048/article/details/81104543
之前也做過報表,因為內容比較簡單,就直接用Label和Textbox控件組合畫出報表,還添加了PrintDialog打印控件用來打印報表,效果如下圖:
代碼核心是:將你想要打印的內容繪制到 PrintDocument對象上去,並單擊該對象的PrintPage事件
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Bitmap _NewBitmap = new Bitmap(panel1.Width, panel1.Height);
panel1.DrawToBitmap(_NewBitmap, new Rectangle(0, 0, _NewBitmap.Width, _NewBitmap.Height));
e.Graphics.DrawImage(_NewBitmap, 0, 0, _NewBitmap.Width, _NewBitmap.Height);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
但是后來遇到復雜的報表上面那種方法就不合適了,看到工具箱里有ReportViewer報表控件,就試着用了用。在網上查閱一番,的確可以完成的需求,但是介紹的很少,都很片面,不夠詳細,折騰我不少時間。其實我希望能有那種傻瓜式的,教我下一步、下一步,下面我盡量把步驟寫的詳細一些:
添加數據集
右鍵項目,選擇添加新建項,數據——數據集——添加:
進入DataSet1.xsd中后,在空白處右鍵,添加-數據表。可以右鍵數據表添加列,或者通過Ctrl+L快速添加列,數據表名和列名都是可以通過鼠標點擊直接修改。
制作報表
右鍵項目,添加新項——Reporting——報表——添加
進入ReportForm.rdlc中,點擊空白處,查看屬性-主體-設置Size:Width = 6.646in,Height = 10.052in.在報表空白處右鍵-插入-文本框。雙擊文本框可直接輸入文字,選中文本框-右鍵-文本框屬性,可調整文本大小、字體、對齊等。
空白處右鍵-插入-矩陣,會自動跳出數據集屬性對話框。名稱可以修改,這個很重要,等后面對數據集填充數據時要用到;數據源選剛才上面添加的數據集,可用數據集系統會自動選定 可用的。
點擊確定后會出現一個矩陣,你可以通過插入列和行來設計你的表格。有時候需要合並單元格,選中幾個單元格右鍵,彈出菜單選中 合並單元格;但正常是沒有 合並單元格那項的,我總結的是:組內部右側插入列后,就會出現。每個單元格既可以作為文本框輸入文本,而且每個單元格右上角有個小菜單,點擊小菜單就可以選擇數據集中的字段。
通過內置表達式獲取打印時間
添加報表界面
右鍵項目添加新項,選Visual C# 項-Windows窗體
選擇工具箱中報表-ReportViewer控件,拖入WebPrintOrder.cs界面中
選擇ReportVierwer控件右上角黑色小三角,顯示“ReportViewer任務”,選擇”在父容器中停靠“;選擇報表選擇 剛才上面制作的report2.rdlc,reportViewer1的ZoomPercent屬性設為75。
添加數據源
通過數據集添加數據
在WebPrintOrder.cs代碼設計界面中,為矩陣的數據集DataSet1添加數據,我的數據是通過界面的構造函數傳過來的然后直接賦值,也可以直接SQL server條件查詢語句將查詢結果直接填充。
private void WebPrintOrder_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
//定義本地數據表的列,名稱應跟之前所建的testDataTable表中列相同。
dt.Columns.Add("Time", typeof(DateTime));
dt.Columns.Add("Distance", typeof(String));
dt.Columns.Add("Layer", typeof(String));
dt.Columns.Add("FID", typeof(Int32));
dt.Columns.Add("Strength", typeof(Int32 ));
dt.Columns.Add("UserName", typeof(String));
//動態生成一些測試用數據
DataRow row = dt.NewRow();
row[0] = time;
row[1] = "管長 "+Distance.ToString ()+"米處";
row[2] = Layer;
row[3] = FID;
row[4] = 4;
row[5] = Login.username+"admin";
dt.Rows.Add(row);
//設置本地報表,使程序與之前所建的testReport.rdlc報表文件進行綁定.
this.reportViewer1.LocalReport.ReportPath = "Report.report2.rdlc";
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt));
this.reportViewer1.RefreshReport();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
通過設置參數添加數據
在report2.rdlc的報表數據中,右擊參數-添加參數,設置參數名稱和數據類型
在矩陣的單元格文本框屬性中,將參數值賦值給單元格。
在WebPrintOrder.cs代碼設計界面中,通過代碼為參數賦值。
private void reportViewer1_Load(object sender, EventArgs e)
{
reportViewer1.ShowParameterPrompts = true;
ReportParameter p = new ReportParameter("StartTime", DateTime.Now.ToString("F"));
this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { p });
this.reportViewer1.RefreshReport();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
運行結果