亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用ASP.NET2.0的ReportViewer查看RDLC報表

2019-11-18 16:57:39
字體:
來源:轉載
供稿:網友

介紹:

這篇文章是前天看園子里給的一個鏈接,具體是誰的我忘記了,只記得http://www.codePRoject.com/aspnet/ReportViewer.asp這個地址被貼了出來,然后說因為什么原因就沒翻譯完。我后來看了下正好對自己有用,因為公司里RS的東西有人在做,而樓下光電部門的BS需求也經常有,并且早就知道有這個東西只是一直沒時間研究,正好找到這個文章,于是就好好的研究了一下午,先翻譯一下,然后再補充點心得。

翻譯的過程中盡量本地化了一下,不過保留了原文作者的意思。如果有翻譯不貼切的地方請各位朋友批評指正。

 

在網上有很多關于SqlServer RS 的服務模式(Server Mode),而我在研究本地模式(Local Mode)確實用了很長的時間,尤其還是有參數調用的時候。

之所以要用本地模式而不是服務器模式,是因為服務模式的客戶端每次請求一個報表的時候,服務器都要把數據組織成報表然后發送到客戶端,雖然這樣子安全些,但是巨型報表從服務器到瀏覽器的傳輸會降低其性能。

所以這個文章是描述如何組織報表并且用asp.net2.0的ReportViewer控件讀取出來的,這里我們選用的就是本地模式,并且是使用帶參數的存儲過程。我所使用的是ASP.NET2.0,VisualStudio2005,還有SQLServer2005加application Block。如果你沒有Microsoft Application Block這個工具,那么就請把示例中通過SQL Helper調用存儲過程的代碼換成SQL Command的就可以了。

在這里我們選用Northwind數據庫,我們的示例展現給用戶的就是讓用戶從下拉列表里選擇貨品名稱然后在報表里篩選出信息來。

第一步,創建帶參數的存儲過程

ALTER PROCEDURE  ShowProductByCategory(@CategoryName nvarchar(15) )

AS

SELECT  Categories.CategoryName, Products.ProductName,

        Products.UnitPrice, Products.UnitsInStock

FROM    Categories INNER JOIN Products ON

        Categories.CategoryID = Products.CategoryID

WHERE   CategoryName=@CategoryName

RETURN

第二步,使用DataSet設計器創建一個DataSet下的DataTable

在解決方案管理器界面里,右鍵App_Code這個文件佳,選擇”Add New Item”。在彈出的對話框里選擇”DataSet”,給它起個名,比如DataSetProducts.xsd,然后點擊”Add”按鈕。這時候TableAdapter配置工具會自動出現,如果沒有出現或者誤將其關閉了的話,在DataSet設計器的任何一個地方點擊鼠標右鍵,選擇Add,然后再選擇TableAdapter這個工具就會再次出現。根據向導來建立DataTable,在出現的界面中分別選擇”User existing stored procedures”作為命令類型然后指定”ShowProductByCategory”作為Select命令。

在第一步創建的存儲過程在第二步里就變成了一個DataTable,而報表數據就是通過這個DataTable提供的。

 

 

圖一:包含一個DataTable的DataSetProducts.xsd就是報表的數據源

 

第三步:創建一個報表文件

在解決發方案管理器下右鍵選擇Add New Item,然后選擇Report模板。在這個示例里是直接用默認的名Report.rdlc的。rdl的意思是報表定義語言,c的意思就是客戶端(client)。也就是說,rdl是個服務器報表,而rdlc是本地報表。

在工具箱里把Table拖拽到報表設計窗體中,這個”表”有三個部分,頭,內容和尾。一個Table就是一個顯示數據的區域,一個區域顯示的是被綁定到的DataSet下的那些數據元素。盡管一個報表是可以擁有很多的區域的,但是,每個區域只能顯示一個DataSet里的內容?;谶@點,我們可以用存儲過程來聯合多張表的數據到一個DataSet里來填充報表。

 

 

圖二:工具欄里的專門做報表模板的控件

 

打開”網站數據源”窗口,找到”DataSetProducts”數據集,就是在第二步里創建的那個。展開直到看到叫”ShowProductByCategory”的這個DataTable。這個Table叫這個名字是因為我們之前在TableAdapter配置向導里選擇了“Use existing stored procedure”這項,并且我們的存儲過程的名字就叫ShowProductByCategory。

在網站數據源窗口中依次把ProductName,UnitPrice和UnitsInStock這三項分別拽到報表設計器里顯示細節的那一行,也就是中間那行的第一列,第二列和第三列。而且你可以右鍵單擊任何一個顯示細節行中的字段,然后在屬性欄里找到Format標簽來為Unit Price和Unit In Stock來定義它們的顯示格式。

 

 

圖三,網站數據源窗體顯示了在你程序里定義的DataSet以及它們所擁有的列

 

第四步:在ASP.NET2.0頁里加入ReportViewer控件

首先把DropDownList控件拽到表單里,然后用選擇數據源選項的方法把Categories里的CategoryName字段進行綁定。在其它場景中用戶可以通過其它方法比如文本框的方式來輸入參數然后傳遞到存儲過程當中。

然后,把Report View控件拖拽到表單中,并且設置其Visible屬性為False。還有需要注意的地方就是,ASP.NET2.0的Report Viewer提供Excel和PDF的導出方式,然而實際的過程中我發現,打印出來的報表和你設計時的樣子總會有點誤差。

 

 

圖四,把這頁設置成為StartUp頁

 

下一步,調出Report Viewer的智能標簽,選擇剛才建立好的Report.rdlc文件。

 

 

圖五,把報表定義文件聯合到Report Viewer控件里。

 

第五步:寫代碼實現用戶在下拉框選擇不同的名稱然后報表里顯示不同的數據

這里不要忘記把Microsoft.Reporting.WebForms命名空間加入到你的code-behind(或code file)文件里。

 

 

 1<PRE lang=cs id=pre1 style="MARGIN-TOP: 0px">using System;
 2using System.Data;
 3using System.Data.SqlClient;
 4using System.Configuration;
 5using System.Collections;
 6using System.Web;
 7using System.Web.Security;
 8using System.Web.UI;
 9using System.Web.UI.WebControls;
10using System.Web.UI.WebControls.WebParts;
11using System.Web.UI.HtmlControls;
12using Microsoft.ApplicationBlocks.Data;
13using Microsoft.Reporting.WebForms;
14
15public partial class ReportViewerLocalMode : System.Web.UI.Page
16{
17    public string thisConnectionString =
18       ConfigurationManager.ConnectionStrings[
19       "NorthwindConnectionString"].ConnectionString;
20
21    /**//*I used the following statement to show if you have multiple
22      input parameters, declare the parameter with the number
23      of parameters in your application, ex. New SqlParameter[4]; */
24
25    public SqlParameter[] SearchValue = new SqlParameter[1];
26
27    protected void RunReportButton_Click(object sender, EventArgs e)
28    {
29        //ReportViewer1.Visible is set to false in design mode
30        ReportViewer1.Visible = true;
31        SqlConnection thisConnection = new SqlConnection(thisConnectionString);
32        System.Data.DataSet thisDataSet = new System.Data.DataSet();      
33        SearchValue[0] = new SqlParameter("@CategoryName",
34                         DropDownList1.SelectedValue);
35
36        /**//* Put the stored procedure result into a dataset */
37        thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
38                      "ShowProductByCategory", SearchValue);
39
40        /**//*or   thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41               "ShowProductByCategory", dropdownlist1.selectedvalue);
42               if you only have 1 input parameter  */
43
44        /**//* Associate thisDataSet  (now loaded with the stored
45           procedure result) with the  ReportViewer datasource */
46        ReportDataSource datasource = new
47          ReportDataSource("DataSetProducts_ShowProductByCategory",
48          thisDataSet.Tables[0]);
49
50        ReportViewer1.LocalReport.DataSources.Clear();
51        ReportViewer1.LocalReport.DataSources.Add(datasource);
52        if (thisDataSet.Tables[0].Rows.Count == 0)
53        {
54            lblMessage.Text = "Sorry, no products under this category!";
55        }
56
57        ReportViewer1.LocalReport.Refresh();
58    }
59}</PRE>
 

 

第六步:運行報表

按F5鍵,單擊”Run Report”按鈕運行報表。

 

 

圖六,運行報表

 

最后要確定ReportViewer被引入到網站中,并且要配置下web.config文件,它有可能是如下的格式:

 

<httpHandlers>

    <add path="Reserved.ReportViewerWebControl.axd" verb="*"

         type="Microsoft.Reporting.WebForms.HttpHandler,

               Microsoft.ReportViewer.WebForms,

               Version=8.0.0.0, Culture=neutral,

               PublicKeyToken=?????????????"

         validate="false" />

</httpHandlers>

 

當把有ReportViewer控件的網站項目部署到別的服務器的時候,你需要把C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/BootStrapper/Packages/ReportViewer/ReportViewer.exe這個文件拷貝出來,然后在目標服務器運行一下。

 

翻譯心得:似乎做過的翻譯中這個是最簡單的了,不過可能也是作者說的比較簡介明了。

學習心得:作者闡述了兩種ReportViewer能接受的報表方式并且做了簡單的分析。不過在實際項目中用Server Mode的可能會更多些吧,Local Mode做一些不是規模太大或者太復雜的報表還是可以的。

公司里有專門做RS的我知道,據說做就要做一周,運行的時候看編寫的質量,十分鐘是正常的,而超過三十分鐘的話就可能需要考慮改算法了。聽起來好恐怖,呵呵,不過,如果能用到樓下光電部門的報表需求的話,我想要比以前GridView to Excel的方式更舒服一些。

如果這個能研究明白的話打算做一個專門的入門視頻講解來幫助更多的人了解這個控件。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av观看网址| 亚洲最大福利视频网| 精品亚洲一区二区三区四区五区| 亚洲999一在线观看www| 亚洲欧美日韩中文在线制服| 亚洲欧美国产一本综合首页| 国产成人精品免高潮费视频| 亚洲精品欧美日韩| 91香蕉国产在线观看| 日韩高清免费在线| 日本久久91av| 国产精品久久久久久久久久久久久| 免费不卡欧美自拍视频| 热久久免费视频精品| 2019中文字幕在线观看| 日韩高清电影免费观看完整版| 国产精品免费久久久久影院| 欧美激情精品久久久久久大尺度| 亚洲国产又黄又爽女人高潮的| 成人久久久久久| 亚洲美女又黄又爽在线观看| 狠狠色香婷婷久久亚洲精品| 色综合色综合网色综合| 国产乱人伦真实精品视频| 日韩成人激情影院| 日韩av一区二区在线| 日韩av手机在线观看| 中文国产亚洲喷潮| 久久久成人精品视频| 日韩免费视频在线观看| 亚洲一二三在线| 麻豆乱码国产一区二区三区| 亚洲国产成人精品久久| 97人洗澡人人免费公开视频碰碰碰| 欧美在线视频观看| 综合激情国产一区| 精品国产欧美一区二区三区成人| 国产自产女人91一区在线观看| 欧美精品免费在线| 久久噜噜噜精品国产亚洲综合| 欧美国产精品va在线观看| 欧美日韩国产丝袜美女| 97精品国产aⅴ7777| 精品日本美女福利在线观看| 97视频在线观看播放| 按摩亚洲人久久| 久久五月情影视| 美女撒尿一区二区三区| 成人亲热视频网站| 亚洲天堂av图片| 色综合91久久精品中文字幕| 午夜精品一区二区三区在线播放| 久久91超碰青草是什么| 日韩在线激情视频| 亚洲r级在线观看| 川上优av一区二区线观看| 亚洲欧美日本精品| 国产一区二区黑人欧美xxxx| 亚洲**2019国产| 亚洲国产成人爱av在线播放| 日韩精品视频中文在线观看| 色与欲影视天天看综合网| 亚洲第一国产精品| 日韩最新免费不卡| 日韩视频永久免费观看| 97精品伊人久久久大香线蕉| 国产精品7m视频| 亚洲第一色在线| 欧美做受高潮1| 国产精品福利无圣光在线一区| 欧美日韩裸体免费视频| 狠狠爱在线视频一区| 欧美高清在线观看| 成人免费看片视频| 91精品视频免费| 亚洲女人天堂av| 亚洲最新av在线| 亚洲精品福利免费在线观看| 亚洲精品aⅴ中文字幕乱码| 国产精品a久久久久久| 日韩精品中文字幕久久臀| 亚洲福利视频免费观看| 欧美伦理91i| 成人深夜直播免费观看| 91精品国产91| 欧美中在线观看| 亚洲女人天堂色在线7777| 欧美国产精品人人做人人爱| 福利视频一区二区| 亚洲无限乱码一二三四麻| 欧美高清一级大片| 久久九九有精品国产23| 精品国产一区二区三区久久狼5月| 91亚洲国产成人精品性色| 亚洲国产日韩精品在线| 亚洲第一网站男人都懂| 久久久久久中文字幕| 国产区精品视频| 欧美噜噜久久久xxx| 亚洲高清福利视频| 日韩风俗一区 二区| 国产在线精品一区免费香蕉| 国产在线观看精品一区二区三区| 欧美一区二区三区图| 久久人体大胆视频| 欧美久久久精品| 91久久久久久久一区二区| 国产精品亚洲片夜色在线| 国产精品午夜一区二区欲梦| 国产在线拍揄自揄视频不卡99| 中文字幕日韩av| 久久久精品免费| 国产一区二区三区在线播放免费观看| 成人欧美一区二区三区在线| 成人激情电影一区二区| 成人免费激情视频| 欧美日韩国产123| 国产一区二区丝袜高跟鞋图片| 国产精品久久久久久久久男| 欧美与欧洲交xxxx免费观看| 午夜免费久久久久| 欧美日韩中文字幕| 亚洲精品美女久久久久| 亚洲性69xxxbbb| 亚洲精品日韩久久久| 欧美日韩国内自拍| 日韩免费av在线| 亚洲精品美女久久久久| 国产视频精品一区二区三区| 欧美午夜精品久久久久久人妖| 国产啪精品视频网站| 在线观看欧美视频| 欧美日韩成人在线观看| 国产suv精品一区二区三区88区| 另类天堂视频在线观看| 国产午夜精品视频免费不卡69堂| 国产精品第一区| 91亚洲国产精品| 九色精品美女在线| 国产日本欧美视频| 亚洲自拍偷拍在线| 在线成人激情视频| 国产精品久久久久久久久| 国产日韩av在线播放| 亚洲国产精品女人久久久| 国产精品中文在线| 亚洲国产欧美一区| 亚洲福利视频在线| 中文字幕亚洲专区| 不卡毛片在线看| 国产视频亚洲视频| 亚洲成人性视频| 欧美裸体xxxx极品少妇| 亚洲自拍偷拍在线| 国产日本欧美一区二区三区| 国产精品毛片a∨一区二区三区|国| 精品亚洲夜色av98在线观看| 韩国精品久久久999| 欧美极品少妇与黑人| 韩国19禁主播vip福利视频| 欧美激情视频免费观看| 裸体女人亚洲精品一区| 欧美在线观看一区二区三区| 91黑丝在线观看|