動態綁定ReportViewer控件之經驗總結


以上兩篇文章已經很豐富了,但是照做一遍不行,檢查了N遍還是不行,就是找不出問題原因,總是提示“尚未為數據源“DataSet1_DataTable1”提供數據源實例。”這主要是說在為ReportViewer控件選擇數據源的時候,還沒有選擇數據源實例,如圖所示

,因此要選擇一個數據源,例如ObjectDataSource1,這個一般是在你選擇的時候自動生成的,但即使選擇了數據源也還是會出錯,比如“處理報表時出錯。未能找到在 ObjectDataSource“ObjectDataSource2”的 TypeName 屬性中指定的類型”等類似的錯誤,因為還差一個關鍵的步驟,就是配置數據源,我們要先選擇業務對象,就是選擇預先准備好的DataSet用來當容器(因為我們要把真正從數據庫中取出來的數據放進去),

然后是定義數據方法,這個地方我不知道具體的過程或邏輯應該是怎樣的,但我覺得應該返回一個DataSet,於是我就選擇了一個Coyp()方法,

於是就順利實現了,總結起來就是:

1、在頁面添加ReportViewer控件。

2、新建一個DataSet文件,設置的字段名要與欲動態綁定的從數據庫提取出來的DataSet一樣,這個主要是用來當做容器,因為報表文件需要用到數據集文件。

3、新建報表文件rdlc,選擇你想要的報表樣式,並將DataSet中的字段拖拽到報表中。

4、為ReportViewer選擇報表,選擇數據源,並配置數據源(具體方法如上所述)。

5、最后就剩下在cs文件中動態指定數據源了,常用代碼如下:

 

                ReportDataSource rds = new ReportDataSource("DataSet1_DataTable1", dt2);//將從數據庫中提取出的DataTable填進DataSet文件中的DataSet1_DataTable1。

                ReportViewer1.LocalReport.DataSources.Clear();

                ReportViewer1.LocalReport.DataSources.Add(rds);

                ReportViewer1.LocalReport.Refresh();

另外,如果我們需要在同一頁面顯示不同情況的報表,比如你如果用的是折線圖,但取出不同的數據它的刻度就會不同,有的數比較大有的數較小,這樣就會影響效果,這種情況就可以制作幾個不同的報表,這就真正用到了動態綁定,甚至於還有更強的方法,不用准備更多的報表,每次都讓它通過代碼生成,例如:

 

                ControlCollection coll = ReportViewer1.Parent.Controls;

                int oldIndex = coll.IndexOf(ReportViewer1);

                ReportViewer newViewer = new ReportViewer();

                coll.AddAt(oldIndex, newViewer);

                coll.Remove(ReportViewer1);

                newViewer.ShowToolBar = false;

                newViewer.Width = 795;

                newViewer.Height = 527;

                newViewer.LocalReport.DataSources.Clear();

                newViewer.LocalReport.ReportPath = MapPath("Report1.rdlc");

                newViewer.LocalReport.ReportEmbeddedResource = "Report1.rdlc";

                newViewer.LocalReport.DataSources.Add(rds);

                newViewer.LocalReport.Refresh();

這個方法的大概意思就是用ControlCollection新建一個ReportViewer的控件集合,再刪除已有的ReportViewer1,添加一個新的newViewer,然后指定需要的數據集,個人覺得這個方法更好一些,關於新生成的newViewer的屬性一樣可以用代碼設置。

注意事項:

1、ReportViewer控件的樣式可以設置,例如我就想要一個報表,不想看見刷新按鈕等,這個就可以ShowToolBar設置為False。

2、實現Refresh在很多時候是必須的,因為已經選擇不顯示刷新按鈕了。但如果你的頁面有updatepanel控件就要注意了,這個會影響你的刷新,最好是去掉updatepanel控件。

 


免責聲明!

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



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