要通过c将rdl加载到asp.net项目中,方法调用中需要做什么#
我试图找出将rdl文件调用/加载到现有asp.net应用程序中的步骤。我将rdl文件上载到ssrs服务器,并正在开发一个自定义ui,该ui利用ssrs端点(sql2008r2)来检索和过滤报告。 我想了解的是,在加载报告时,究竟需要向报告提供哪些指导? 最初,我尝试使用本地处理,但基于我所阅读的内容以及环境要求,我需要使用报表处理来生成报表。 在aspx文件中,我添加了报告查看器:要通过c将rdl加载到asp.net项目中,方法调用中需要做什么#,asp.net,reporting-services,reportviewer,Asp.net,Reporting Services,Reportviewer,我试图找出将rdl文件调用/加载到现有asp.net应用程序中的步骤。我将rdl文件上载到ssrs服务器,并正在开发一个自定义ui,该ui利用ssrs端点(sql2008r2)来检索和过滤报告。 我想了解的是,在加载报告时,究竟需要向报告提供哪些指导? 最初,我尝试使用本地处理,但基于我所阅读的内容以及环境要求,我需要使用报表处理来生成报表。 在aspx文件中,我添加了报告查看器: <asp:UpdatePanel ID="ReportViewPanel" runat="server"
<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();
}
//基于从端点返回的内容创建报告链接按钮的代码
受保护的无效RenderReportLinks(System.Web.UI.WebControl.Panel p,列表项)
{
p、 添加(新的LiteralControl(“”);
foreach(项目中的风险值r)
{
p、 控件。添加(新的LiteralControl(“- ”);
LinkButton lb=新的LinkButton();
lb.Text=FormatReportNames(r.Name);
lb.ToolTip=GenerateReportDescription(r);
lb.CommandArgument=r.Path;//ssrs服务器上的路径//文件夹/reportname
lb.Click+=新建事件处理程序(ReportLink\u Click);
p、 控件。添加(lb);
p、 控件。添加(新的LiteralControl(“
”);
}
p、 控件。添加(新的LiteralControl(“
”);
}
void ReportLink\u单击(对象发送者,事件参数e)
{
LinkButton rpt=(LinkButton)发送方;
MyReportViewer.LocalReport.ReportPath=rpt.CommandArgument+“.rdl”;
ReportViewPanel.Update();
}
当前,当我运行此控件时,该控件不会在页面上呈现或显示任何内容
我知道我需要使用ServerReport而不是LocalReport,但我不清楚的是,检索和呈现报告的方法需要包含哪些内容。数据源是rdl定义的一部分,还是我也需要引用/加载它?(不,我没有创建报告,我刚刚接到加载报告的任务)。SSR服务器与Web客户端的服务器不同,有什么需要考虑的吗?最后,每个报告都有参数,我需要传递这些参数吗,还是可以提示用户
通过代码加载报表时,首先收集所有参数(登录、报表参数、数据源),然后将其作为对象传递给报表,并将结果返回给查看器。或者,在加载报告(空白)然后用户与之交互的情况下,它是否可以与用户从报告管理页面单击报告标题的情况类似
如果有任何建议或参考,我将不胜感激
提前谢谢
-干杯我可以看到您的报告数据源丢失了。无论它是来自服务器还是本地,都需要提供它们
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"]));
希望这些对您有用。因此,在我们的报表服务器上,我们还上传了数据源,因为这些报表的查询非常复杂。您正在创建内存中的DT,然后将其作为源进行传递,对吗?是否可以参考为初始报告创建的现有数据源?