【发布时间】: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