首页 > 解决方案 > ReportViewer 可以在本地模式下自行提取数据吗?

问题描述

我的任务是制作一个网页(aspx),它会自动读取rdlcs,并生成一个网页,顶部的参数为webelements,报告为页面的主要部分。

到目前为止,我已经尝试将文件作为 XML-Doc 读取,并从中解析信息。但这可能会更简单。(我对报告或rdl(c)文件没有经验)。

我看到有一个DataSets/DataSet/Query/CommandText-Tag,它可以保存一个SQL 语句。现在让我的老板和我自己假设,有可能让它自己已经提供这些信息,我对此进行了编码。另一方面,我看不到任何例子。

我当前的代码如下所示:

private string rdlcFilepath = "some/path/to/file.rdlc";
protected void Page_Load(object sender, EventArgs e) {
    string sql = GetSqlStatementFromRdlcFile(rdlcFilepath);
    DataTable dtTest = DatabseFacade.Execute_SQL(sql);

    MainReportViewer.LocalReport.ReportPath = Server.MapPath(rdlcFilepath);
    MainReportViewer.ProcessingMode = ProcessingMode.Local;
    MainReportViewer.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dtTest));
    MainReportViewer.LocalReport.Refresh();
}

所以,我有两个理论:

  1. -Tag 标记是“报告服务器”的CommandText一个标记,只能在 中使用ProcessingMode.Remote,在本地模式下不相关。
  2. 我正在接近这整件事是错误的。

如果 2 为真,那么问题可能是手动添加dtTest,它应该有一些其他指令来使报告元素自己“拉”数据。

我的问题:

我可能会注意到,我在互联网上看到的每个教程/示例都ProcessingMode.Local使用了“外部”数据表和LocalReport.DataSources.Add方式。

为了清楚起见,我们(我的老板和我的)理想的解决方案是一些“魔术”命令,它使 ReportViewer 使用rdlc文件中的信息连接到数据库并显示结果。毕竟它包含所有信息,从连接字符串到 SQL 语句。

标签: c#reportviewer

解决方案


请注意,rdl 文件是 Native SSRS 报告版本,开发起来更快更容易。这里需要的Project的类型是“Reporting Services Project”,而rdlc是rdl文件的客户端,一般是在普通的visual studio web或者桌面项目中开发的,当然是作为本地报表使用的,通常需要比较多的时间要进行开发,您必须提供所有数据源、数据集和参数(如果有)。在我看来,您的问题有更简单的解决方案。您实际上可以设置远程或本地 SSRS 报告服务服务器,这将使您能够在本地处理报告(rdl 文件),这基本上更清洁、更快。在性能方面,我认为本机模式可以扩展并优于本地或客户端报告选项 (.rdlc)。使用这种方法,您不必添加数据源或数据集或参数,因为所有这些您将在本机配置并使用配置管理器来配置共享数据源和数据集。您只需在您的页面中验证使用并提供您的 SSRS 服务器的 URI、用户名、密码和报告路径。要了解有关配置 SSRS 服务器的更多信息,请使用此链接: SQL Server 报告服务配置管理器

网上也有很多链接。您可以像下面的代码示例所示对用户进行身份验证:

                // Set the processing mode for the ReportViewer to Remote  
                ReportViewer1.ProcessingMode = ProcessingMode.Remote;
                ServerReport serverReport = ReportViewer1.ServerReport;
                ReportViewer1.ServerReport.ReportServerCredentials = new CustomReportCredentials("username", "password", "domain/Ip");
                serverReport.ReportServerUrl =
                   new Uri("http://xx.xxx.xxx.222/ReportServer_MSSQLSERVER2016");
                serverReport.ReportPath = "/Reports/Report3";
                ReportViewer1.ServerReport.Refresh();

这是关于将凭据传递到 Sql Report Server 2008 的一个很好的链接 将凭据 传递到 Sql Report Server 2008 这就是您需要做的所有事情。只需拖动报表查看器并验证用户身份即可。希望这对你有帮助。


推荐阅读