C#+WINFORM用REPORTVIEWER控件制作報表


轉載地址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

運行結果
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM