1. 程式人生 > >C# rdlc 報表學習總結

C# rdlc 報表學習總結

C# 建立報表過程詳解

http://www.jb51.net/article/68481.htm


本文給大家介紹的是使用vs2012 c#建立報表的全部過程的記錄,十分的詳細,有需要的小夥伴可以參考下。
..1、新建windows窗體,專案-->新增新項-->Visual C#項-->Windows Form-->windows窗體。


2、窗體中加入button按鈕和報表控制元件。


3、新建報表,專案-->新增新項-->reporting-->報表,生成.rdlc檔案。


4、在.rdlc上插入表格-->新建資料來源-->資料庫-->資料集-->新建連線,步驟如下:


5、這裡輸入資料庫連線的伺服器名,登入資料庫的使用者名稱和密碼,選擇資料庫名稱。


6、選擇需要用的表。


7、名稱可以自己寫,本人沒改,資料來源為自己選擇的資料庫名稱,可用資料集為表名。


8、.rdlc介面在表格的第一行輸入欄位名,第二行點選每列右上角的小圖示選擇該列要顯示的欄位名。


9、回到Form窗體點選報表右上角的小三角,選擇剛剛建立的報表Report1.rdlc,資料來源預設的就可以,本人在這裡沒有修改資料來源名稱還是DataSet1.


10、後臺程式碼


public Form1()
{
InitializeComponent();
this.reportViewer1.Load -= new System.EventHandler(this.reportViewer1_Load);
}


private void button1_Click(object sender, EventArgs e)//button點選事件
{
reportViewer1_Load(sender, e);
}


private void Form1_Load(object sender, EventArgs e)
{
this.reportViewer1.Load -= new System.EventHandler(this.reportViewer1_Load);
}


private void reportViewer1_Load(object sender, EventArgs e)
{
DataTable table = helps.GetDataTable("select ID,UserID,OID from User_Org where 1=1");
this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", table));
this.reportViewer1.RefreshReport();
}


執行程式載入:


點選button


這裡寫的是點選button後才載入資料。


========

C#中使用RDLC報表(1)

http://blog.csdn.net/panting8/article/details/7320540
1 建立資料來源
啟動VS2005新建一個窗體專案,命名為TestProj


在左邊的窗體內選擇“新增新資料來源”或在選單上操作“新增新資料來源”:


選擇後出現對話窗體,選擇“資料庫”,進入“下一步”:


本資料來源以SqlServer2000所提供的Northwind資料庫為例,因此在資料庫內選擇驅動程式為SqlServer,具體操作視所用資料庫而定(如果連線為Oracle,建議用Oracle所提供的ODP for .NET,地址:http://www.oracle.com/technology/global/cn/software/tech/windows/odpnet/index.html)。


選擇資料來源後,指定資料庫檔案,並進行測試,如果連線不通,請檢查你的軟體設定。


進行下一步,至顯示出庫檔案內的表及檢視,然後開啟表,並選擇其中的Employees,選擇完成。


在資料來源視窗中顯示出所選擇表及表內的欄位,以備使用。


同時在資源管理器中,也可以看到新增加的資料檔案。


2  報表瀏覽器
在新建的窗體內,放入報表瀏覽控制元件:


此報表瀏覽控制元件集成了報表檢視及列印預覽的功能,可直接輸出至印表機,也可直接輸出至Excel檔案或PDF檔案,對於喜歡看Excel表格的客戶來說,這個報表控制元件非常不錯。關於此報表的來源及臺前幕後的各種說法,請自己查詢相關的網站。


3  建立報表檔案
選中報表瀏覽器控制元件後,在控制元件的右上角會出現一個小三角,點選後,出現一個選單,選擇“設計新報表”或在解決方案資源管理器中新增一個新的報表檔案:


雙擊“報表項”內的“表”,則設計空白表內生成一個表格,我們可以在表格內新增資料項。


此報表的設計方式類似於MS以前的VB下報表設計環境。在報表設計器中,我將一份報表分為五個部分,從上至下為:報表標題區、列標題區、資料顯示區、合計及頁尾。如果將報表的設計形式顯示出頁首及頁尾,報表的形式會看得更清楚些:


選擇頁首及頁尾:


顯示結果:


現在開始設計報表:


在“頁首”區內放入一個文字框,將內容更改為“測試報表”,居中,字型放大加粗:


從資料來源視窗中選擇合適的列,用滑鼠拖到報表內的“詳細資訊”表格上,資料會自動填入:


將設計的報表儲存後,返回報表瀏覽視窗,併為報表瀏覽器選擇我們設計的報表:


選中報表檔案後,選單也有所改變:


再為此報表檔案指定資料來源,選擇資料來源:


確定,儲存檔案並執行測試檔案。


4   預覽
報表生成後預覽如下:


是不是很簡單?我們也可以對這個簡單的報表進行美化,當然,我加上美化的一些功能後,可能效果更差,但此處只是為了演示用法。


?         為資料加表格。


在報表設計器中,選擇需要加表格框的區域


然後在工具欄中選擇邊框工具


加什麼樣的框線根據需要,此處我選擇“所有框線”。


看上去比原來的灰線能稍黑一些,在預覽時就能看出來了。


?         加列印時間顯示


加入一個顯示列印時間的文字框,在上面按右鍵,選屬性:


在“檔案框屬性”內,選擇“值”後面的表示式生成:


在表示式中選擇時間:


不要忘記表示式的前面一定要有一個“=”,如果沒有,手工加上一個。為了更符合我們的習慣,前面可以加個說明,如列印時間等,表示式的寫法就要稍做改變:還是以“=”開頭,後面加上“列印時間:”,再以“&”連線生成的Now函式即可得到我們想要的樣子。


?         為行加序號


為了演示,我將序號列加在了表格了最後列


加入一個新的列:


在顯示序號的列中輸入相關的值:


在此表示式的後面是Nothing,不是null,不要搞錯。


三項功能已經完成,預覽:


比原來漂亮嗎?至少實用了一些。


使用RDLC報表(二)--使用自定義資料集
1 新建窗體


2 建立資料來源


3 建立報表


新的資料報表已經生成,下面開始對資料來源進行設定。


4 對報表自動生成的資料來源進行設定
選擇工具欄 à 報表 à 資料來源,選中所要修改的資料來源後,用“重新命名”對其進行修改,如myds。


修改完成後,確定退出此視窗。


選中報表設計器內的表格,顯示屬性。將表格的資料集名稱更改為上面修改的名稱。


如果一個報表檔案內只有一個數據源,則表格內的資料值可直接寫為“=Fields!欄位.Value”的格式,如果包含多個數據源,則要對此欄位的取值進行指定,如“=(Fields!欄位.value,“資料集名稱””。


5 手動生成資料來源
手動生成的資料集內必須包含報表檔案內設計的欄位名稱,否則會執行出現錯誤。


生成資料集:


           // 報表執行操作
        private void button1_Click(object sender, EventArgs e)
        {
            //取得資料集
            string connstring = "Data Source=.;Initial Catalog=Northwind;Integrated Security=True";
            System.Data.SqlClient.SqlConnection conn1 = new System.Data.SqlClient.SqlConnection(connstring);
            System.Data.SqlClient.SqlCommand command1 = new System.Data.SqlClient.SqlCommand("select * from customers", conn1);
            System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data.SqlClient.SqlDataAdapter(command1);
            DataSet c_ds = new DataSet();
            try
            {
                conn1.Open();
                ada1.Fill(c_ds);
            }
            finally
            {
                conn1.Close();
                command1.Dispose();
                conn1.Dispose();
            }
             //為報表瀏覽器指定報表檔案
            this.reportViewer1.LocalReport.ReportEmbeddedResource = "report.Report1.rdlc";
            //指定資料集,資料集名稱後為表,不是DataSet型別的資料集
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("myds", c_ds.Tables[0]));
            //顯示報表
            this.reportViewer1.RefreshReport();
        }


執行後的資料顯示:




使用RDLC報表(三)--向RDLC報表傳入引數
在使用報表向客戶展示結果資料時,實時的在報表中顯示某些特定的資料是必需的,如:顯示的部門、列印的日期等。本文只簡單的演示向報表內傳入一個字元值。如有其它問題,歡迎討論。


1、新建一個工程TestReport,一個Form窗體,放入一個TextBox、一個Button按鈕,再放入一個ReportViewer控制元件。
2、在ReportViewer上選擇新建一個報表
3、在開啟的報表設計器中,選擇工具欄的“報表”中的“報表引數”,新加一個引數,名稱為content,資料型別為string,確定。
4、 在報表設計器的頁面上放入一個文字框,在文字框上按滑鼠右鍵->屬性,在“文字框屬性”視窗中,選擇“常規”選項卡內下部的“值”後面的“編輯表達 式”按鈕(就是那個Fx),在此視窗內,左下框內選擇引數,在右下框將會出現在上一步中設定的引數,雙擊此引數,在上面的框內將出現所需要的表達 式:=Parameters!content.Value。儲存此報表。報表預設名稱為Report1.rdlc。
5、在Form窗體內雙擊按鈕,編寫如下程式碼:


            this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.Report1.rdlc";
            ReportParameter rp = new ReportParameter("content", this.textBox1.Text);
            this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { rp });
            this.reportViewer1.RefreshReport();


6、執行工程,在文字輸入框內輸入資料,按下按鈕,資料是不是已經傳入報表了?


//報表引數
ReportParameter[] RP = new ReportParameter[8];
//報表引數名稱
string[] RptParmsName = new string[8] { "p_BillNo", "p_compForshort", "p_LuptDate", "p_compFullname", "p_RecoverSigner", "p_deptname", "p_Issuer", "p_DeliveryDate" };
//報表引數值
object[] RptParmsValue = new object[8] { dt.Rows[0]["BillNo"].ToString(), dt.Rows[0]["compForshort"].ToString(), dt.Rows[0]["LuptDate"], dt.Rows[0]["compFullname"].ToString(), dt.Rows[0]["RecoverSigner"].ToString(), dt.Rows[0]["deptname"].ToString().Trim(), UserName, dt.Rows[0]["DeliveryDate"] };
//為報表傳遞引數
for (int i = 0; i < RP.Length; i++)
{
  RP[i] = new ReportParameter(RptParmsName[i], RptParmsValue[i].ToString());
  this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { RP[i] });
}


使用RDLC報表(四)--鑽取式報表
本文內以MSServer自帶Northwind庫檔案內的Customers及Orders這兩個表為例,建立兩個報表檔案,在查詢得出 Customers的表資料後,點選此表內的CustomerID資料,報表將轉入至下一個報表,並顯示與之相關的Orders的資料,即VS中所謂的鑽 取式報表。


1、開啟一個工程,並新建一個From,放入一個Button及一個ReportViewer控制元件。
2、在工程內新建一個數據源,連線到Northwind庫檔案,顯示Customers及Orders這兩個表
3、新建一個報表檔案,並以表格的形式來顯示資料,將Customers表內的CustomerID、CompanyName及Address三個欄位放入,形成一份有表頭及資料的簡單報表,並將此報表儲存命名為customerReport
4、再建一個報表檔案,與customerReport相同,也以表格的形式來顯示報表,將Orders內的OrderID、CustomerID、ShipName及OrderDate四個欄位放入表格內,報表儲存為orderReport
5、orderReport的資料來源根據主報表customerReport的資料來確定資料來源的資料,查看錶格的資料集名稱,我的顯示為NorthwindDataSet_Orders,也可以自己另建一個,具體方法見我的《RDLC報表(二)》
6、 再開啟customerReport報表,將CustomerID設定成為可點選的索引欄位,以便轉入下一個報表。選擇CustomerID欄位,按滑鼠 右鍵,在”文字框屬性“視窗中,選擇”導航“選項卡,在下面的”超連結“中選擇”跳至報表“,在報表名稱中選擇”orderReport“,再按下後面 的”引數...“按鈕,輸入一個引數名稱,如customerid,引數值選擇=Fields!CustomerID.Value。為了與其它資料相區 分,可以將此列資料根據自己的習慣改變顏色或加下劃線
7、在orderReport中,設定一個報表引數,與CurtomerReprot中的名稱相同,以接收父表中傳入的引數
8、 新建兩個取得資料的方法,一個從Customers中取得資料集,另一個從Orders中取得資料集,且帶引數。此兩個方法可以自己編寫類庫來實現,也可 以在VS的資料集內新增。為了演示方便,我直接使用了Customers的GetData(),並編寫了一個Orders的 GetDataByCustomerID(@cid)的方法。
9、在From的Button中編寫如下程式碼:
        private void button2_Click(object sender, EventArgs e)
        {
            NorthwindDataSet.CustomersDataTable dt1 = new NorthwindDataSetTableAdapters.CustomersTableAdapter().GetData();
            this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.customerReport.rdlc";
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NorthwindDataSet_Customers", dt1));
            this.reportViewer1.RefreshReport();
        }


10、使用報表的Drillthrough事件,當選擇了鑽取項時會發生此事件,給下一個報表取值,程式碼如下:
        private void reportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)
        {
            LocalReport lp = (LocalReport)e.Report;
            string customerid = lp.GetParameters()["customerid"].Values[0].Trim();


            lp.DataSources.Clear();
            lp.DataSources.Add(new ReportDataSource("NorthwindDataSet_Orders",
                new NorthwindDataSetTableAdapters.OrdersTableAdapter().GetDataByCustomerID(customerid)));
        }


運到結果:
執行第一份報表:


鑽取後執行第二份報表:
========

 使用RDLC報表(二)--使用自定義資料集

http://blog.csdn.net/panting8/article/details/7320555
新建窗體


<!--[if !supportLists]-->2<!--[endif]-->建立資料來源


3<!--[endif]-->建立報表


新的資料報表已經生成,下面開始對資料來源進行設定。


<!--[if !supportLists]-->4<!--[endif]-->對報表自動生成的資料來源進行設定
選擇工具欄 à 報表 à 資料來源,選中所要修改的資料來源後,用“重新命名”對其進行修改,如myds。




修改完成後,確定退出此視窗。


選中報表設計器內的表格,顯示屬性。將表格的資料集名稱更改為上面修改的名稱。


如果一個報表檔案內只有一個數據源,則表格內的資料值可直接寫為“=Fields!欄位.Value”的格式,如果包含多個數據源,則要對此欄位的取值進行指定,如“=(Fields!欄位.value,“資料集名稱””。


<!--[if !supportLists]-->5<!--[endif]-->手動生成資料來源
手動生成的資料集內必須包含報表檔案內設計的欄位名稱,否則會執行出現錯誤。


生成資料集:


<!--


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/


-->       /// <summary>


        /// 報表執行操作


        /// </summary>


        /// <param name="sender"></param>


        /// <param name="e"></param>


        private void button1_Click(object sender, EventArgs e)
        {
            //取得資料集


            string connstring = "Data Source=.;Initial Catalog=Northwind;Integrated Security=True";


            System.Data.SqlClient.SqlConnection conn1 = new System.Data.SqlClient.SqlConnection(connstring);


            System.Data.SqlClient.SqlCommand command1 = new System.Data.SqlClient.SqlCommand("select * from customers", conn1);


            System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data.SqlClient.SqlDataAdapter(command1);


            DataSet c_ds = new DataSet();
            try
            {
                conn1.Open();
                ada1.Fill(c_ds);
            }
            finally
            {
                conn1.Close();
                command1.Dispose();
                conn1.Dispose();
            }


            //為報表瀏覽器指定報表檔案
            this.reportViewer1.LocalReport.ReportEmbeddedResource = "report.Report1.rdlc";
            //指定資料集,資料集名稱後為表,不是DataSet型別的資料集
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("myds", c_ds.Tables[0]));
            //顯示報表
            this.reportViewer1.RefreshReport();
        }


執行後的資料顯示:
========

使用RDLC報表(三)--向RDLC報表傳入引數

http://blog.csdn.net/panting8/article/details/7320559
在使用報表向客戶展示結果資料時,實時的在報表中顯示某些特定的資料是必需的,如:顯示的部門、列印的日期等。本文只簡單的演示向報表內傳入一個字元值。如有其它問題,歡迎討論。


1、新建一個工程TestReport,一個Form窗體,放入一個TextBox、一個Button按鈕,再放入一個ReportViewer控制元件。
2、在ReportViewer上選擇新建一個報表
3、在開啟的報表設計器中,選擇工具欄的“報表”中的“報表引數”,新加一個引數,名稱為content,資料型別為string,確定。
4、在報表設計器的頁面上放入一個文字框,在文字框上按滑鼠右鍵->屬性,在“文字框屬性”視窗中,選擇“常規”選項卡內下部的“值”後面的“編輯表示式”按鈕(就是那個Fx),在此視窗內,左下框內選擇引數,在右下框將會出現在上一步中設定的引數,雙擊此引數,在上面的框內將出現所需要的表示式:=Parameters!content.Value。儲存此報表。報表預設名稱為Report1.rdlc。
5、在Form窗體內雙擊按鈕,編寫如下程式碼:


            this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.Report1.rdlc";
            ReportParameter rp = new ReportParameter("content", this.textBox1.Text);
            this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { rp });
            this.reportViewer1.RefreshReport();




6、執行工程,在文字輸入框內輸入資料,按下按鈕,資料是不是已經傳入報表了?
========

ReportViewer動態報表開發完整步驟

http://blog.csdn.net/waterxcfg304/article/details/45788639


在朋友的邀請下,給他們公司開發一個簡單的公司入口網站。本人都多年沒有寫ASP.NET C#程式碼了。這幾年都在做資料庫和商務智慧這塊。反正朋友說網站不難,就個簡單的展現網站,於是就答應了,找了一天到他們公司去聽具體的開發需求,聽了需求後,覺得難道不是很大,主要的難點在一個線上租賃平臺。朋友的公司是做檢測裝置租賃的。於是就答應了。承諾在1個月內做好。主要是週末和晚上做。


所有的框架和頁面展示功能都還可以,很快就開發好了。但是當在開發列印報表的時候,遇到了就障礙,主要是自己以前做的大多是C/S的開發。B/S的做的不多,更沒有開發個B/S報表,而且該報表的資料來源是動態的。


於是只能找度娘了,找了好多都沒有滿足我的要求的,大部分都是簡單的直接的從資料庫表裡拉一個靜態表做為資料來源。要不就是草草的寫點步驟,步驟還不是完整的,誤導特大。說誤導是我自己按照他們的說法做,除錯都不成功,那個心情是想罵娘啊。天不負苦心人。終於搞定了。於是下定決心來寫一個完整的步驟。希望能給找這方面需求的朋友能直接按照我的步驟一步一步做下去就可以實現結果。


ReportViewer連線靜態的資料表就不說了,下面來寫下如何實現讓ReportViewer繫結動態的資料來源:


一,建立一個Web窗體,命名為WebPrintOrder。 在工具箱裡拉一個MicrosoftReportViewer控制元件到該Web窗體裡




1,把MicrosoftReportViewer拉到頁面自動生成如下頁面程式碼:


<rsweb:ReportViewer ID="ReportViewer1" runat="server">
</rsweb:ReportViewer>
2,檢視頁面設計就會顯示一個報表控制元件如下:




二,為報表設定資料來源


1,新增RDLC報表控制元件,名稱report.rdlc




2,返回到WebPrintOrder設計介面,點選報表的右上角的>,選擇我剛才新增的Report.rdlc如下圖:


,3


3,雙擊選擇report.rdlc,這個時候顯示的是report.rdlc的設計頁面,點選【新增新資料來源】,這時候就會顯示如下的樣式,左邊多了一個DataSet1,右側在App_Code的目錄下面多了一個DataSet1.xsd的檔案。


4,雙擊DataSet1.xsd檔案,並且在該頁面上【右鍵】新增DataTable顯示如下圖:


5,我建立了一個名稱為PrintOrder的表,然後新增具體的表字段如下圖:


6,由於我的報表裡需要兩個資料來源,於是我再次新增資料來源如下圖:


7,當我點選【新增新資料來源】的時候,系統自動又幫我建立了一個DataSet2.xsd 的檔案在App_Code下面,如下圖:


8,再次雙擊DataSet2.xsd, 新增新的表如下圖:


9,新增一個表名稱為RentInfo的表如下:


10,回到report.rdlc設計介面就可以看到兩個資料來源了,分別叫DataSet1 和 DataSet2


三,開始設計報表


1, 在report.rdlc設計頁面,把文字框,折線圖和表拖到報表頁面上


2,表裡的資料直接從網站資料來源裡把相應的表字段拉到表的明細裡就可以了。如下圖:


3,這裡需要重點介紹的是如何在報表裡新增引數,選擇【報表】----》【報表引數】 如下圖:


4, 我的引數設計如下:


5,上面是報表設計和資料來源設計完成,下面來看程式碼如何和此報表關聯起來。


四,報表資料來源的繫結程式碼


[csharp]
protected void Page_Load(object sender, EventArgs e)  
   {  
       if (!IsPostBack)  
       {  
           if (!string.IsNullOrEmpty(Request.QueryString["ID"]))  
           {  
               strRentDateCode = Request.QueryString["ID"].ToString();  
           }  
  
           BindData();  
           BindPrintOrder();  
  
  
           string CompanyName=Session["Member"].ToString();  
           QueryParam queryparam = new QueryParam();  
  
           if (!string.IsNullOrEmpty(CompanyName))  
               queryparam.Add("CompanyName", QueryParam.RELATION.EQ, "'" + CompanyName + "'");  
  
           memberModel = member.GetMemberModel(CompanyName);            
  
  
           DataTable dtPrintOrder = GetPrintOrderData();  
           DataTable dtRentInfo = GetRentInfoData();  
  
           ReportViewer1.LocalReport.ReportPath = "Report.rdlc";  
           Microsoft.Reporting.WebForms.ReportDataSource rds = new Microsoft.Reporting.WebForms.ReportDataSource("DataSet1_PrintOrder", dtPrintOrder);  
           Microsoft.Reporting.WebForms.ReportDataSource rds2 = new Microsoft.Reporting.WebForms.ReportDataSource("DataSet2_RentInfo", dtRentInfo);  
  
           //ReportParameter rptParaA = new ReportParameter("rptParaA", "申請日期");  
           //ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rptParaA });  
  
           //ReportParameter rptParaB = new ReportParameter("rptParaB", "公司名稱");  
           //ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rptParaB });  
  
  
           ReportViewer1.LocalReport.DataSources.Clear();  
           List<ReportParameter> para = new List<ReportParameter>();  
           //這裡是新增兩個欄位  
           para.Add(new ReportParameter("RentDate", strRentDateCode));  
           para.Add(new ReportParameter("CompanyName", memberModel.CompanyName));  
  
           para.Add(new ReportParameter("Address", memberModel.Address));  
           para.Add(new ReportParameter("Person", memberModel.Person));  
  
           para.Add(new ReportParameter("Phone", memberModel.Phone));  
           para.Add(new ReportParameter("Email", memberModel.Email));  
  
           para.Add(new ReportParameter("Count", dtPrintOrder.Rows.Count.ToString()));  
  
  
           this.ReportViewer1.LocalReport.SetParameters(para);  
           ReportViewer1.LocalReport.DataSources.Add(rds);  
           ReportViewer1.LocalReport.DataSources.Add(rds2);  
  
           this.ReportViewer1.ZoomMode = Microsoft.Reporting.WebForms.ZoomMode.Percent;  
           this.ReportViewer1.ZoomPercent = 100;  
  
           ReportViewer1.LocalReport.Refresh();    
  
       }  
   }  
五, 執行程式檢視報表如下:


匯出成PDF如下:


六,至此ASP.Net C# 動態ReportViewer開發完成。如果您能一直看到這裡,我相信您肯定能開發出此類報表。希望此文章能給您幫助。歡迎互相學習!我也是B/S報表開發的二把刀,呵呵!
========