2005バージョンでローカルrdlcファイルを実行すると、レポートサービスに問題が発生しました。
HTMLで、次のようにローカルで実行するように設定されたレポートビューアがあります。
<rsweb:ReportViewer ID="ReportingServicesReportViewer" runat="server" Height="100%"
ProcessingMode="Local" ShowParameterPrompts="False" Width="100%">
</rsweb:ReportViewer>
コードで
// create SqlConnection
SqlConnection myConnection = new SqlConnection(ConnectionString);
myCommand.Connection = myConnection;
SqlDataAdapter da = new SqlDataAdapter(myCommand);
//get the data
DataSet data = new DataSet();
da.Fill(data);
if (data != null && data.Tables.Count > 0 && data.Tables[0].Rows.Count > 0)
{
ReportingServicesReportViewer.Visible = true;
ltrStatus.Text = string.Empty;
//provide local report information to viewer
ReportingServicesReportViewer.LocalReport.ReportPath = Server.MapPath(Report.RDLCPath);
//bind the report attributes and data to the reportviewer
ReportDataSource rds = new ReportDataSource("DataSet1", data.Tables[0]);
ReportingServicesReportViewer.LocalReport.DataSources.Clear();
ReportingServicesReportViewer.LocalReport.DataSources.Add(rds);
ReportingServicesReportViewer.LocalReport.Refresh();
}
else
{
ReportingServicesReportViewer.Visible = false;
ltrStatus.Text = "No data to display.";
}
レポートビューアーにレポートの結果を設定するメソッドを実行すると、レポートビューアーが存在しないかのように何も起こりません。
私が今までにトラブルシューティングするために行ったこと:
誰かがこれに似た問題に遭遇しましたか?
単純なレポートを使用してみてください。レポートビューアが無効なRDLCが原因で例外をスローし、空のレポートが表示されることがあります。
また、プロジェクトをデバッグしてVisual Studioの出力ウィンドウを確認してみてください。RDLエンジンに対して警告が表示されます。エラーの原因を調査すると役立つ場合があります。
VS2012で同じ問題が発生しました。レポートにロードイメージが表示され、ロードが完了した後、レポートが空白になります。データは存在しますが、レンダリングされません。
解決策:ReportAsyncRenderingをFalseに変更するだけで、レポートは再び正常に機能します。
Rdlcにパラメーターを追加しても、割り当てないときに同じ問題が発生しました。このコードを追加して解決しました。
Dim p_Date As Microsoft.Reporting.WebForms.ReportParameter
p_Date = New Microsoft.Reporting.WebForms.ReportParameter("DATE", txtDate.Text)
Me.ReportViewer1.LocalReport.SetParameters(New Microsoft.Reporting.WebForms.ReportParameter() {p_Date})
ReportViewer1.LocalReport.Refresh()
私の場合、ReportViewerコントロールはエラーメッセージ(EventViewerまたはReportViewerコントロールの本体)を提供せず、空白ページのみを提供します。これは問題を見つけて修正するのを難しくしていると思います。 Yoel Halbの答えが私の鍵でした!
IsReadyForRenderingというプロパティがFalseでした。 BOL内 はパラメータートピックを参照します。
コードを使用してパラメーター全体のすべての値を検査できます(イミディエイトウィンドウから実行できます)
var parameters = ReportViewer1.LocalReport.GetParameters()
「MissingValidValue」という値を持つプロパティStateを調べると、問題のあるパラメータが見つかります。
お役に立てれば !
私は同じ問題を抱えていましたが、私の場合、実際にレポートが予期していたオブジェクトタイプではないデータセットを提供したことがわかりました。
私の状況では、レポートはビジネスオブジェクトを想定していましたが、SQLデータソースを提供しました。
レポートにnullまたは空白にすることは許可されていないが、パラメーター値が指定されていないパラメーターがある場合にも、この同じ問題が発生しました。
また、コードでデータソースを設定するには、page_loadイベントではなく、onloadイベントで行う必要があります。
これは理解するのに少し時間がかかったので、うまくいけば、これらのチェックで時間を節約できるでしょう:
1)web.configを確認します
<system.web>
<httpHandlers>
<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" />
</httpHandlers>
<buildProviders>
<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</buildProviders>
</system.web>
<system.webServer>
<handlers>
<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" />
</handlers>
<system.webServer>
2)構成をコードに移動する前に、レポートビューアーコントロールをデザインビューで直接試してください。
3)スクリプトマネージャーがレポートビューアーの前のページにあることを確認します。
4)レポートがローカルまたはSSRSサーバーのいずれかでデザインビューアーの外部で実行されることを確認します。
5)レポートがすべてのパラメータに対してデフォルト値を持っていることを確認してください!パラメータが必要で、デフォルト値がないレポートは空白で表示されます。
用紙のサイズを変更した後、またはreportviewerが機能しない場合は、遅延を追加して私の解決策を試すことができます
WaitControlDisplayAfter
データが大きすぎて非同期で処理できない場合がある
私の場合、犯人はAllow null値= false(チェックされていない)のパラメータを持っていました...理由を聞かれません。
私は同様の問題を理解するために何日も費やしてきました。多分これは誰かを助けることができるでしょう。私はstackoverflowでほとんどすべてのスレッドを読みましたが、ここのコメントを読んでこれを試してみました。私の場合、最初の2行(パラメーター行とパラメーターを非表示にするオプションのある行)が表示されましたが、管理ボタンとレポート自体を含む行は空でした。 View report
はアクションを起こしませんでした。
私がやったことは、それらを提供せずにパラメータを持つレポートをロードすることでした-私はユーザーにそれらを記入してもらいたいと思っていました-Page_Load
。
protected void Page_Load( object sender, EventArgs e )
{
this.LoadReport();
}
private void LoadReport()
{
// retrieve path param from "Reports/{path}" URL
string reportPath = Request.QueryString[ "path" ] as string;
string reportServerUrl = System.Configuration.ConfigurationManager.AppSettings[ "ReportServerUrl" ];
this.MainReport.ProcessingMode = ProcessingMode.Remote;
this.MainReport.ServerReport.ReportServerUrl = new Uri( reportServerUrl );
this.MainReport.ServerReport.ReportPath = reportPath;
this.MainReport.ServerReport.Refresh();
}
変更後Page_Load
以下に示すコードはすべて正常に動作します。
protected void Page_Load( object sender, EventArgs e )
{
if ( !this.IsPostBack )
this.LoadReport();
}
同じ問題がありました。しばらく時間がかかりましたが、私が誤ってreportViewerコントロールを自分で新しくしたため、フォームをデザインしたときにVisual Studio Designerが作成したものを失ったため、reportviewerコントロールが空白のままでした- Visual Studio DesignerのReportViewerオブジェクトにプロパティを設定したことはありません。
愚かな間違いですが、理解するのにかなりの時間がかかりました。