在VS 2008中使用.RDLC 2005这项技术非常有效,现在在VS 2010中实施的 .RDLC 2008 我得到一个空白(或没有?)报告。
我做了一些修改以适应.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名称保持一致(如果不是,我会得到一个特定的例外,我不这样做。)
答案 0 :(得分:2)
我遇到了类似的问题blog post。简短的回答是我需要安装报告查看器可再发行组件,并添加处理程序。
答案 1 :(得分:1)
似乎报告内容已呈现,但根本不可见。
尝试使用
查看生成的HTML(DOM)也许过去曾有过工作的CSS现在隐藏了你的报告区域。