【问题标题】:.RDLC Report 2008 (in VS 2010) ReportViewer appears with no report or data.RDLC Report 2008(在 VS 2010 中) ReportViewer 出现时没有报告或数据
【发布时间】:2011-09-09 04:12:58
【问题描述】:

在 VS 2008 中使用 .RDLC 2005,这项技术效果很好,现在在 .RDLC 2008 中,正如在 VS 2010 中实现的那样我得到一个空白(或没有?)报告。

我已经进行了一些更改以适应 .RDLC 2008,目前我没有任何例外。当前(不需要的)输出如下所示:

我有一个自定义 ReportController 类,它有一个 ShowReport 的公共方法(也是一个管理报告导出的方法,但它(还没有)起作用。)

从 asp.net 页面中,我调用属性集中的控制器(类型为 DataSet,由页面控制器调用),例如:(ReportController 实现 IDisposable

try
{
    using (var reportController = new ReportController(true))
    {
         _ReportViewer = reportController.ShowReport("DemonstrationList", value, phReportHolder);

         if (_ReportViewer != null)
         {
             _ReportViewer.ShowRefreshButton = false;
             _ReportViewer.ShowPrintButton = false;
             _ReportViewer.Width = Unit.Pixel(700);// Unit.Percentage(99);
             _ReportViewer.Height = Unit.Pixel(700);// Unit.Percentage(90);
         }
    }

    lblRecordCount.InnerText = value.Tables[0].Rows.Count.ToString();
}
catch (Exception ex)
{
    phReportHolder.InnerHtml = string.Format("There was an error attempting to process this report <br/><br/><div style='color:White;'>{0}</div>", ex.Message);
}

ShowReport 方法是:

public ReportViewer ShowReport(string ReportName, DataSet ds, HtmlContainerControl ReportContainer)
{
    ReportContainer.Controls.Clear();
    ReportViewer reportViewer = BuildReport(ReportName, ds);
    ReportContainer.Controls.Add(reportViewer);
    return reportViewer;
}

这允许我告诉控制器使用任何提供的数据集将任何“有效”报告放入任何 htmlcontainercontrol。

BuildReport 获取数据和报告名称并将报告构建为:

private ReportViewer BuildReport(string ReportName, DataSet ds)
{
      try
      {
         _activeDS = ds;
         string ReportFileName = ResolveRDLCName(ReportName);
             // ResolveRDLCName is used along with path strings 
             // initialized from configuration settings in the 
             // constructor to make this portable. 
         var viewer = new ReportViewer();
         viewer.ProcessingMode = ProcessingMode.Local;
         viewer.LocalReport.ReportPath = ReportFileName;
         viewer.LocalReport.DisplayName = ReportName;
         viewer.LocalReport.EnableHyperlinks = true;
         AssignReportData(ds, viewer.LocalReport);

        return viewer;
      }
      //...Exception handlers below are not invoked at this time

“AssignReportData”将数据附加到报告中。

private static void AssignReportData(DataSet ds,  LocalReport Report)
{
         var listOfDatasources = Report.GetDataSourceNames();

         foreach (string dsn in listOfDatasources)
         {
            ReportDataSource rds = new ReportDataSource(dsn,ds.Tables[dsn]);
            Report.DataSources.Add(rds);
         }
}

开发技术确保 dataTable/dataSource 名称保持一致(如果不一致,我会得到一个特定的异常,但我没有。)

【问题讨论】:

    标签: c# asp.net reporting-services rdlc


    【解决方案1】:

    我遇到了类似的问题,blog post 回答了这个问题。简短的回答是我需要安装可再发行的报表查看器,并添加处理程序。

    【讨论】:

      【解决方案2】:

      报告内容似乎已呈现,但根本不可见。

      尝试使用

      查看生成的 HTML (DOM)
      • Chrome:右键单击报告区域,“检查元素”以探索 DOM
      • Internet Explorer:安装 IE Developer Toolbar 以探索 DOM

      也许一些过去有效的 CSS 现在隐藏了您的报告区域。

      【讨论】:

      • 已经这样做了。工具栏是渲染的,报告内容不是。
      • @Cos 你有没有检查过viewer.ShowReportBody在渲染之前被设置为false?
      • @Cos 渲染后也可以查看viewer.ReportAreaContentType的值
      • 仍然,没有喜悦。感谢您的努力。
      • 再次感谢您尝试帮助解决此问题。感谢您的时间和精力(即使它没有解决问题。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2014-05-01
      相关资源
      最近更新 更多