在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