闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗銆掑锝呬壕濡ょ姷鍋為悧鐘汇€侀弴銏犖ч柛灞剧煯婢规洖鈹戦缁撶細闁告鍐f瀺鐎广儱娲犻崑鎾舵喆閸曨剛顦繝鈷€鍕垫疁妤犵偛妫濆顕€宕煎顏佹櫊閹鏁愭惔婵堝嚬閻庣懓鎲$换鍕閹烘挻缍囬柕濞垮劤閻熴劌顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秶鍠栭幃娆撳箣濠靛洤顦╅梺鎶芥敱閸ㄥ湱妲愰幘瀛樺濠殿喗鍩堟禍婵嬪箞閵娾晛鐐婇柕濞垮€楃粻姘渻閵堝棛澧柣鏃戝墴閻擃剟顢楅崒妤€浜鹃悷娆忓绾炬悂鏌涙惔锝嗘毈鐎殿噮鍋婇獮妯肩磼濡粯顏熼梻浣芥硶閸o箓骞忛敓锟�濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁炬儳顭烽弻锝夊箛椤掍焦鍎撶紓浣哄С閸楁娊寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磽娴e搫啸闁哥姵鐗犲濠氬Ω閳哄倸浜滈梺鍛婄箓鐎氬懘濮€閵堝棛鍘遍梺闈浨归崕閬嶅焵椤掆偓濠€閬嶅箲閵忕姭妲堥柕蹇曞Т閼板灝鈹戦埥鍡楃仴妞ゆ泦鍥棄鐎广儱顦伴埛鎴犵磼鐎n偒鍎ラ柛搴㈠姉缁辨帞鎷犻幓鎺撴婵犵绱曢弫璇茬暦閻旂⒈鏁嶆慨妯夸含閺夋悂姊绘担鍝ユ瀮婵℃ぜ鍔庨幏瀣蓟閵夈儳锛涢梺瑙勫礃椤曆囧礃閳ь剟鎮峰⿰鍐炬█鐎殿喗鎮傚顕€宕奸悢鍝勫汲闂備胶绮ú鏍磹閸︻厸鍋撳鐐
开发学院WEB开发ASP.NET 使用ASP.NET2.0的ReportViewer查看RDLC报表 阅读

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

 2006-09-30 17:15:06 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愯姤鎱ㄥ鍡楀幊缂傚倹姘ㄩ幉绋款吋閸澀缃曢梻鍌欑濠€閬嶆惞鎼淬劌绐楅柡宥庡亞娑撳秵銇勯弽顐沪闁绘挶鍎甸弻锝夊即閻愭祴鍋撻崷顓涘亾濮樼偓瀚�闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗銆掑锝呬壕濡ょ姷鍋涢ˇ鐢稿极閹剧粯鍋愰柟缁樺笧閳ь剦鍙冨鍝勑ч崶褏浠奸梺璇茬箲閼归箖鎮鹃悜钘夎摕闁靛濡囬崢鐢告⒑鐟欏嫷鍟忛柛鐘崇墵閵嗗倹绺介崨濠勫幈闁硅壈鎻槐鏇熺墡闂備線娼уú銈団偓姘嵆閻涱噣骞掑Δ鈧粻锝嗙節闂堟稑鏆欏ù婊堢畺閺岋綁濮€閳惰泛婀辨竟鏇熺節濮橆厾鍘甸梺缁樺姦閸撴岸鎮樻潏銊ょ箚闁圭粯甯炴晶娑氱磼缂佹ḿ娲寸€规洖宕灃闁告劕鍟犻崜婵堟崲濞戞ḿ鏆嗗┑鐘辫兌閺佹牜绱撴担浠嬪摵闁圭懓娲ら悾鐑藉箳閹搭厽鍍甸梺鐟板悁閻掞箓鎮楅幖浣光拻濞达絿鍎ら崵鈧梺鎼炲€栭悧鐘荤嵁韫囨稒鏅搁柨鐕傛嫹婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繑銇勯幘鍗炵仼缂佺媭鍨堕弻娑㈠箛闂堟稒鐏堥悗鐟版啞缁诲啴濡甸崟顖氱閻庨潧鎽滈悾濂告⒑绾拋娼愭繛鑼枎椤繒绱掑Ο鑲╂嚌闂侀€炲苯澧畝锝堝劵椤︽煡鎮¢妶澶嬬厪闁割偅绻冮崑顏呯箾瀹割喕绨婚幆鐔兼⒑鐎圭姵銆冮柤鍐茬埣瀹曟繈鏁冮埀顒勨€旈崘顔嘉ч柛鈩冾殘閻熸劙姊洪悡搴℃毐闁绘牕銈稿畷鐑樼節閸パ冨祮闂侀潧楠忕槐鏇㈠储椤忓牊鈷戦柟鑲╁仜閸旀鏌¢崨顔锯姇缂佸倹甯熼ˇ瀵哥磼鏉堛劌绗氭繛鐓庣箻閸┾剝鎷呴柨瀣垫綗闂傚倷娴囧銊╂倿閿曞倸绠查柛銉墮閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣椤愯姤鎱ㄥ鍡楀幊缂傚倹姘ㄩ幉绋款吋閸澀缃曢梻鍌欑濠€閬嶆惞鎼淬劌绐楅柡宥庡亞娑撳秵銇勯弽顐沪闁绘挶鍎甸弻锝夊即閻愭祴鍋撻崷顓涘亾濮樼偓瀚�  闂傚倸鍊搁崐鎼佸磹閹间礁纾归柣鎴eГ閸ゅ嫰鏌ら崫銉︽毄濞寸姵姘ㄧ槐鎾诲磼濞嗘帒鍘$紓渚囧櫘閸ㄥ爼濡撮崘顔煎窛闁哄鍨归崢娲倵楠炲灝鍔氭い锔诲灦瀹曪繝骞庨懞銉у帾闂婎偄娲﹀ú鏍ㄧ墡闂備浇顕х€垫帡宕滈悢濂夋綎闁惧繐婀辩壕鍏间繆椤栨碍鎯堟い顐㈢焸濮婅櫣鎷犻懠顒傤唹濠殿喗菧閸旀垿宕洪埀顒併亜閹哄秶顦﹂柛銈庡墴閺屾盯骞樼捄鐑樼€诲銈庡亜缁绘劗鍙呭銈呯箰鐎氼剟鎮楅鐑嗘富闁靛牆妫欑粈鈧梺鐟板暱闁帮絽鐣峰⿰鍕嚤閻庢稒菤閹锋椽姊绘笟鍥т簽闁稿鐩幊鐔碱敍濞戞瑦鐝峰銈嗘煥婢х晫澹曢悡搴唵閻犺櫣灏ㄩ崝鐔虹磼婢跺孩顏犻柍褜鍓氶鏍窗閺嶎厸鈧箓鏌ㄧ€b晝绠氬┑顔界箓閻牆危閻戣姤鈷戠紒瀣儥閸庢劙鏌熼悷鐗堟悙閾荤偤鏌涢幇鈺佸Ψ婵℃彃鐗婄换娑㈠幢濡ゅ啰顔夊┑鐐茬墛閿曘垹顫忕紒妯诲濡炲绨肩憰鍡欑磽閸屾氨袦闁稿鎸荤换娑氣偓娑欋缚閻倝鏌涢幘璺烘灈鐎规洘妞介崺鈧い鎺嶉檷娴滄粓鏌熼悜妯虹仴闁逞屽墮缂嶅﹤顕i幎绛嬫晢闁告洦鍓涢崢閬嶆煟鎼搭垳绉靛ù婊呭厴閻擃剟顢楅崒妤€浜鹃悷娆忓绾惧鏌涘Δ鈧崯鍧楊敋閿濆纾归柣鏇氱劍闉嬮梻鍌欑閹碱偄螞鐎靛摜涓嶉柟鎹愵嚙閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷
核心提示:介绍:这篇文章是前天看园子里给的一个链接,具体是谁的我忘记了,使用ASP.NET2.0的ReportViewer查看RDLC报表,只记得http://www.codePRoject.com/aspnet/ReportViewer.asp这个地址被贴了出来,然后说因为什么原因就没翻译完,如果能用到楼下光电部门的报表需求的

介绍:

这篇文章是前天看园子里给的一个链接,具体是谁的我忘记了,只记得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的方式更舒服一些。

如果这个能研究明白的话打算做一个专门的入门视频讲解来帮助更多的人了解这个控件。

Tags:使用 ASP NET

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接