Visual Studio 2012 For Web Professinal のコントロール「ReportViewer」を使って、WebフォームにReporting Servicesのレポートを表示する

稼働済みのReportをエクスポートさせたくない、という依頼を受けたので、WebフォームでReportViewerを使用してレポートを表示するようにし、エクスポートボタン表示・非表示を切り替えられるようにしてみる。
 
Visual Studio 2012 For Web Professinal のコントロール「ReportViewer」を使って、WebフォームにReporting Servicesのレポートを表示する。
なお、Visual Studio 2012 For Web ExpressではReportViewerを使用できません。
 
 
確認事項
 
レポートA → アクション(レポートへ移動) → レポートB というようなことも、ReportViewer内で展開されるようだ。レポートAのパラメータをレポートBのパラメータへ引き渡すこともできる。またレポートBにはレポートAに戻るボタンが自動で設置されるようだ。
 
レポートを表示するボタンを設置し、ボタンクリックしたら、セッションにレポート名、エクスポートボタン有無、レポート幅、レポート高さ、アカウント名を設定し、Reportviewer.aspxを呼び出せば、セッションで指定したレポートが表示される。Webフォーム上の戻るボタンをクリックすると、元のページに戻るとともに、ReportViewer関連のセッションをクリアする。アカウントを指定させるのは、見せるデータ範囲をレポート側で制御するため。アカウントと社員番号はあらかじめ関連付けされている。
レポートサーバーURL、フォルダはWeb.configのappSettingsで指定し、そこから取得するようにした。
 
ASP(Reportviewer.aspx)
  1: <%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="Reportviewer.aspx.vb" Inherits="Reportviewer" %>
  2: <%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
  3: 
  4: <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
  5: </asp:Content>
  6: <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
  7:         <asp:Button ID="ButtonBack" runat="server" Text="戻る" />
  8:         <rsweb:ReportViewer ID="ReportViewer" runat="server" Font-Names="Verdana" Font-Size="8pt" Height="900px" ProcessingMode="Remote" ShowExportControls="False" ShowPrintButton="False" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="1000px">
  9:             <ServerReport ReportServerUrl="" />
 10:             <LocalReport EnableHyperlinks="True">
 11:             </LocalReport>
 12:         </rsweb:ReportViewer>
 13: </asp:Content>

ReportViewerを表示するためにはScriptManagerが必要みたい。上記サンプルはマスタページにScriptManagerを設置済みなので、Reportviewer.aspxにScriptManagerを設置していない。

 

 

VB(Reportviewer.aspx.vb)
  1: Partial Class Reportviewer
  2:     Inherits System.Web.UI.Page
  3: 
  4:     Protected Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
  5: 
  6:         Dim ReportSeverURL As String = ConfigurationManager.AppSettings("ReportSeverURL")
  7:         Dim ReportFolder As String = ConfigurationManager.AppSettings("ReportFolder")
  8: 
  9:         Session("ReoprtName") = "movielist"
 10:         Session("アカウント") = User.Identity.Name
 11:         Session("RVSEC") = False
 12:         Session("RVWidth") = 1800
 13:         Session("RVHeighy") = 500
 14: 
 15:         'ReportViewer.ServerReport.ReportServerUrl = New Uri("http://sn78sh7/reportserver")
 16:         ReportViewer.ServerReport.ReportServerUrl = New Uri(ReportSeverURL)
 17:         'ReportViewer.ServerReport.ReportPath = "/movie/movielist"
 18:         ReportViewer.ServerReport.ReportPath = ReportFolder + Session("ReoprtName").ToString
 19:         Dim param As New Generic.List(Of Microsoft.Reporting.WebForms.ReportParameter)
 20:         param.Add(New Microsoft.Reporting.WebForms.ReportParameter("RP_Acount", Session("アカウント").ToString, False))
 21:         ReportViewer.ServerReport.SetParameters(param)
 22:         ReportViewer.ShowExportControls = Session("RVSEC")
 23:         ReportViewer.Width = Convert.ToInt32(Session("RVWidth"))
 24:         ReportViewer.Height = Convert.ToInt32(Session("RVHeighy"))
 25: 
 26:     End Sub
 27: 
 28:     Protected Sub ButtonBack_Click(sender As Object, e As EventArgs) Handles ButtonBack.Click
 29: 
 30:         Dim strRVBackURL As String = Session("RVBackURL")
 31:         Session("RVBackURL") = Nothing
 32:         Session("ReoprtName") = Nothing
 33:         Session("RVSEC") = Nothing
 34:         Session("RVWidth") = Nothing
 35:         Session("RVHeighy") = Nothing
 36:         Session("RVBackURL") = "Default8Tile.aspx"
 37: 
 38:         Response.Redirect(strRVBackURL)
 39: 
 40:     End Sub
 41: 
 42: End Class

Session("RVSEC")がTrueの場合は、エクスポートボタンを表示し、Falseの場合は非表示にする。

 

Web.config

  1: <configuration>
  2:   <connectionStrings>
  3:     <add name="MOVIEConnectionString" connectionString="Data Source=SN78SH7;Initial Catalog=MOVIEDEV;Integrated Security=True" providerName="System.Data.SqlClient"/>
  4:   </connectionStrings>
  5:   <system.web>
  6:     <httpHandlers>
  7:       <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" validate="false"/>
  8:     </httpHandlers>
  9: 
 10: 中略
 11: 
 12:   <system.webServer>
 13:     <modules runAllManagedModulesForAllRequests="true"/>
 14:     <defaultDocument>
 15:       <files>
 16:         <add value="Default8Tile.aspx"/>
 17:       </files>
 18:     </defaultDocument>
 19:     <handlers>
 20:       <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
 21:     </handlers>
 22:   </system.webServer>
 23:   <appSettings>
 24:     <add key="ReportSeverURL" value="http://sn78sh7/ReportServer"/>
 25:     <add key="ReportFolder" value="/movie/"/>
 26:   </appSettings>

 

 

 

 

 

 

 

コメント

このブログの人気の投稿

ダブルクォーテーションで括られたCSVカ​ンマ区切りテキストファイルを SQL Server で Bulk Insert する方法

PowerShellでTSV/CSVの列を絞り込んで抽出し、(先頭/行末)からN行出力する

IKEAの鏡を壁に取り付ける