在VS 2008与2005年.RDLC工作这项技术在2008年.RDLC工作非常出色,现在在VS 2010中实现我得到了一个空白(或否?)报告。.RDLC报告2008(2010年VS)的ReportViewer好像没有任何报告或数据
我已经做了一些修改以适应.RDLC 2008,此时我没有得到任何例外。本(不希望)输出如下:(也是一个管理的报告的出口,但是这(还)没有在场上)
我有一个公共的方法来ShowReport定制ReportController类
从asp.net页I调用在属性集的控制器(类型的数据集,由页控制器调用)像:(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 /数据源名称保持一致(如果他们没有,我会得到一个特定的异常,这我不知道。)
已经做到了。工具栏是渲染,报告内容不是。 – 2011-06-16 15:26:52
@Cos您是否在绘制之前检查了'viewer.ShowReportBody'设置为false? – oleschri 2011-06-16 15:46:04
@Cos你可能也会在渲染后看看'viewer.ReportAreaContentType'的值 – oleschri 2011-06-16 15:48:58