.RDLC Report 2008(在VS 2010中)ReportViewer出现时没有报告或数据

时间:2011-06-07 18:36:38

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

在VS 2008中使用.RDLC 2005这项技术非常有效,现在在VS 2010中实施的 .RDLC 2008 我得到一个空白(或没有?)报告。

我做了一些修改以适应.RDLC 2008,此时我没有例外。当前(不需要)输出如下所示: enter image description here

我有一个自定义的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名称保持一致(如果不是,我会得到一个特定的例外,我不这样做。)

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

尝试使用

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

也许过去曾有过工作的CSS现在隐藏了你的报告区域。