方法调用所需的全部内容通过c#将rdl加载到asp.net项目中

时间:2013-01-26 15:54:54

标签: asp.net reporting-services reportviewer

我试图找出调用/加载rdl文件到现有asp.net应用程序的步骤。我将rdl文件上传到ssrs服务器,我正在开发一个自定义ui,它利用ssrs端点(sql2008r2)来检索和过滤报告。 我正在寻找一些指导,关于究竟需要向报告提供什么才能加载它? 最初我开始尝试使用本地处理,但基于我所阅读的内容以及我需要使用报告处理来生成报告的环境要求。 在aspx文件中,我添加了报表查看器:

<asp:UpdatePanel ID="ReportViewPanel"  runat="server" UpdateMode="Conditional">
  <ContentTemplate>
     <rsweb:ReportViewer ID="MyReportViewer" runat="server">
         </rsweb:ReportViewer>
  </ContentTemplate>
</asp:UpdatePanel>

在单击链接后面的代码中,我尝试按如下方式加载报告:

//code that creates the report link buttons based on what is returned from endpoint    
protected void RenderReportLinks(System.Web.UI.WebControls.Panel p, List<ReportItems> items)
{
   p.Controls.Add(new LiteralControl("<ul class='HorizontalList'>"));
   foreach (var r in items)
   {
     p.Controls.Add(new LiteralControl("<li>"));
     LinkButton lb = new LinkButton();
     lb.Text = FormatReportNames(r.Name);
     lb.ToolTip = GenerateReportDescription(r);
     lb.CommandArgument = r.Path; //path on ssrs server /<servername>/folder/reportname
     lb.Click += new EventHandler(ReportLink_Click);
     p.Controls.Add(lb);
     p.Controls.Add(new LiteralControl("</li>"));
   }
     p.Controls.Add(new LiteralControl("</ul>"));
}

void ReportLink_Click(object sender, EventArgs e)
{
  LinkButton rpt = (LinkButton)sender;
  MyReportViewer.LocalReport.ReportPath = rpt.CommandArgument + ".rdl";
   ReportViewPanel.Update();
}

目前,当我运行此控件时,控件不会在页面上呈现或显示任何内容。

我知道我需要使用ServerReport而不是LocalReport,但我不清楚的是所有需要成为检索和呈现报告的方法的一部分。数据源是rdl定义的一部分还是我需要引用/加载它? (不,我没有创建报告,我刚刚负责加载它们)。 SSRS服务器与Web客户端位于不同的服务器上,有什么我需要考虑的吗?最后,每个报告都有参数,我必须通过这些参数或者是否可以提示用户?

通过代码加载报告时,首先收集所有参数(登录,报告参数,数据源),然后将其作为一个对象传递给报告,然后向查看者返回包含结果的报告。或者它可以是加载报告的空白(空白),然后用户与之交互,类似于用户是否从报告管理页面点击了报告标题?

我真的很感激任何建议或参考 提前致谢 -cheers

1 个答案:

答案 0 :(得分:1)

我可以看到您的数据来源丢失了。无论是来自服务器还是本地,您都需要提供它们

 DataTable dtOrders = GetProducts();
 DataTable dtProducts = GetOrders();

 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dsOrdersInRDL", dtOrders));
 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dsProductsInRDL", dtProducts));

此外,您还需要提供参数值

 ReportViewer1.LocalReport.SetParameters(new Microsoft.Reporting.WebForms.ReportParameter("ParameterName", Request.QueryString["OrderID"]));

希望这些对您有用。