有没有一种方法可以处理一个LocalReport对象(完成这个部分),然后在ReportViewer控件中的另一个窗体上显示它?这个想法是在没有ReportViewer的情况下打印(已经完成),但是,如果用户想要打印,也可以预览他要打印的内容。
我使用的是Visual Basic .NET SDK3.5和Visual Studio2008。如果需要,也可以使用2010。
我试着这样做:
ReportViewer1.LocalReport = myLocalReport 但不幸的是,因为ReportViewer上的LocalReport属性是只读的...
对此有什么提示吗?提前谢谢。
(我知道要使用ReportViewer1.LocalReport方法执行此操作。我只想创建一个单独的代码,并将其直接绑定到打印机或预览表单)
发布于 2012-01-29 04:37:36
LocalReport为只读,但ReportPath和ReportEmbeddedResource是可设置的
尝试这样做,或者如果您的报表未嵌入,请尝试设置LocalReport的ReportPath属性
reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("GravatomsReportRegister", GravatomsFullInfoByIdBindingSource));
reportViewer1.LocalReport.ReportEmbeddedResource = "Gravatun.GraviGrancumReport.rdlc";
reportViewer1.RefreshReport();发布于 2013-01-15 08:43:24
我有一个类似的情况,因为我有一个服务,可以创建一个本地报告,然后可以生成一个文件,电子邮件等。然而,因为ReportViewer.LocalReport是一个只读属性,我不得不复制代码用于建立报告或复制的值从我的LocalReport到ReportViewer.LocalReport。我对这两种选择都不感兴趣,因为要么可能无法复制(例如子报告事件),要么存在代码重复。
我想出了以下扩展来设置带有反射的ReportViewer上的LocalReport。我还没有完全测试这一点,这可能是一个坏主意!然而,它似乎适用于我目前正在从事的项目。我不知道ReportViewer是否对它的本地报告做了一些额外的初始化,所以可能会有一些东西爆炸……
我再怎么强调也不为过--使用风险自负--可能不是一个好主意,
public static class ReportViewerExtensions
{
public static void SetLocalReport(this ReportViewer reportViewer, LocalReport report)
{
var currentReportProperty = reportViewer.GetType().GetProperty("CurrentReport", BindingFlags.NonPublic | BindingFlags.Instance);
if (currentReportProperty != null)
{
var currentReport = currentReportProperty.GetValue(reportViewer, null);
var localReportField = currentReport.GetType().GetField("m_localReport", BindingFlags.NonPublic | BindingFlags.Instance);
if (localReportField != null)
{
localReportField.SetValue(currentReport, report);
}
}
reportViewer.RefreshReport();
}
}用法:
LocalReport localReport = reportService.GenerateCurrentOrdersReport(....);
reportViewer.SetLocalReport(localReport);https://stackoverflow.com/questions/8886031
复制相似问题