VS2010 C# ReportViewer控件新手上路心得

(永遠不要抱怨)


環境:Visual Studio 2010, C#;

前言:本來是用VS2010連接Oracle數據庫做一個報表功能,數據集設置部分出了些問題還未解決,因此先用本地動態數據爲測試用例先熟悉VS自帶的ReportViewer控件。新手上路,共同進步。牛蛙可以忽略。

本文主要包含以下內容:

一、ReportViewer使用小例子的完整步驟(新建-設計-編碼-調試-結果);

二、ReportViewer使用過程常見問題及關鍵注意點(僅爲本人個人觀點);

三、參考資料;

四、心得體會;

===================================================================================================================================


一、ReportViewer使用小例子的演示。

1、新建項目。

新建一個Windows窗口程序項目,命名爲“Demo";

2、加入ReportViewer控件。

(1)在默認出現的Form1.cs[設計]視圖中手動調節下Form1窗體的大小,左側工具箱-->報表-->雙擊其中的”ReportViewer";

(圖 1)

(2)切換至設計窗口,選擇ReportVierwer控件右上角黑色小三角,顯示“ReportViewer任務”,選擇”在父容器中停靠“;

(圖 2)

3、添加數據集。

(1)在”解決方案資源管理器“的本項目”Demo“上右鍵,-->添加-->新建項...。在”已安裝的模板“(左側)選擇”數據“,在對應的右側欄中選”數據集“,併爲其命名爲”testDataSet.xsd“。

(圖 3)

(2)在自動顯示的testDataSet.xsd窗口空白處右鍵,-->添加-->數據表。

(圖 4)

(3)點擊表頭爲其改名爲”testDataTable",並在下一行的空白處右鍵,-->添加-->列。按快捷鍵“Ctrl + L”,共建四個列,並將列名自定義修改。(及時保存)

(圖 5)

4、添加報表。

(1)同添加數據集相似。在項目名稱上右鍵,-->添加-->新建項...。”已安裝模板“中選擇”Reporting“,相應右側選擇”報表“,在下面名稱中改爲”testReport.rdlc“。

(圖 6)

(2)在新視圖的主體部分(黑色方框內部爲主體部分,外部爲報表部分)空白處右鍵,-->插入-->表。

(圖 7)

(3)會自動彈出”數據集屬性“對話框,將”名稱“改爲”DataSetName"(這個名稱很重要,後面代碼中要用到,故要記清),“數據源”選擇剛新建的“testDataSet",”可用數據集“會自動選擇”testDataTable“,"確定”。

(圖 8)

(4)在testReport.rdlc[設計]視圖下,剛建的“表”只有三列,在任一單元格上右鍵,-->插入列-->靠右。在第一行的”表頭“輸入這三列的表頭,在第二行的”數據“行,鼠標移動每個單元格上,點擊單元格右上角的圖標,選擇相應的列。

(圖 9)

5、綁定報表。

返回”Form1.cs[設計]"視圖,如圖 2類似,這次點擊“選擇報表”右側的下拉條,選擇我們新建的報表“demo.testReport.rdlc",全部保存。

(圖 10)

6、添加代碼。

查看”Form1.cs“的代碼,在Form1_Load()方法中添加代碼。代碼如下(以下只是Form1_Load()方法的代碼,不是全部,添加時需要在using下多加一行)。

	using Microsoft.Reporting.WinForms;
	private void Form1_Load(object sender, EventArgs e)
        {
            loadReport();
            this.reportViewer1.RefreshReport();
        }

        public void loadReport()
        {
            DataTable dt = new DataTable();
            //定義本地數據表的列,名稱應跟之前所建的testDataTable表中列相同。
            dt.Columns.Add("Column1", typeof(string));
            dt.Columns.Add("Column2", typeof(string));
            dt.Columns.Add("Column3", typeof(string));
            dt.Columns.Add("Column4", typeof(string));

            //動態生成一些測試用數據
            for (int i = 0; i < 50; i++)
            {
                DataRow row = dt.NewRow();
                row[0] = "Test01-" + i.ToString();
                row[1] = "Test02-" + i.ToString();
                row[2] = "Test03-" + i.ToString();
                row[3] = "Test04-" + i.ToString();
                dt.Rows.Add(row);
            }

            //設置本地報表,使程序與之前所建的testReport.rdlc報表文件進行綁定。
            this.reportViewer1.LocalReport.ReportPath = "testReport.rdlc";
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetName",dt));
        }

7、運行效果。


===================================================================================================================================

二、需要注意的幾個地方。

1、代碼中new ReportDataSource("DataSetName",dt)),這裏的DataSetName是上面”一、4、(3)“裏那個名字,而不是所建的數據集文件”testDataSet.xsd"的名字。我之前因爲把這裏弄錯,花了好長時間才修正。

2、按上述步驟弄完後,也許還不好出來想要的結果。可能會彈出“本地報表處理期間出錯”等錯誤提示。

解決方法:將“testReport.rdlc"文件複製一份放到提示的指定Debug目錄下。

上述方法固然可以,但每次都要手動將文件進行復制,顯然不合適。這時其實只需要在”解決方案資源管理器“中點擊報表文件”testReport.rdlc",在下方的屬性一欄中,從“複製到輸出目錄”後面的下拉菜單中選擇“始終複製”。這樣,便不用手動往Debug目錄複製文件了。(也有網友將屬性中的“生成操作”一項的“嵌入的資源”改爲“內容”。但對本例不適用,僅作說明)

===================================================================================================================================

三、參考資料。

1、本例最初的參考:參考資料1

2、對於如何自定義報表每頁顯示多少行的參考:參考資料2

3、關於報表中分組的參考:參考資料3

4、調試過程遇到問題解決思路的參考:參考資料4

===================================================================================================================================

四、心得體會。

       程序員是幹什麼的?是解決問題的。因此,遇到問題後,我們要做的就是去解決它,而且,是問題就一定會解決的。

       很多問題不怕你在上面花費時間,花的時間跟自己對這個問題的認識程序是成正比的。解決問題的過程,我們可以從更多側面學到很多,無論是縱向加深理解,還是橫向的知識擴展。

       最後引用一句話,是解決這個問題最煩燥時,查資料的無意間發現一網友的個人簽名,跟大家共勉:

       “哈哈,快樂的程序員”大笑


       快樂是一種態度,哈哈,千萬不要爲了一時的小問題放棄了生活中的其他快樂。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章