Visual Studio LocalReport对象和ReportViewer
有没有办法处理LocalReport
对象(已完成此部分)并在ReportViewer
控件中显示其他表单之后显示它?这个想法是在没有ReportViewer的情况下打印(已经完成),但是,如果用户想要也可以预览他将要打印的内容。Visual Studio LocalReport对象和ReportViewer
我使用的是Visual Basic .NET SDK 3.5和Visual Studio 2008.如果需要,也可以使用2010。
我tryed做这样的事情:
ReportViewer1.LocalReport = myLocalReport
,但没有运气,因为LocalReport
财产上ReportViewer
是只读...
对此有何暗示?提前致谢。
(我知道这用ReportViewer1.LocalReport
方法。我想要的是建立一个单一的代码,并将其直接或预览的形式绑定到打印机瓶坯)
LocalReport是只读的,但ReportPath和ReportEmbeddedResource是可置
尝试这样的事情,或者如果您的报告不嵌入尝试设置LocalReport
reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("GravatomsReportRegister", GravatomsFullInfoByIdBindingSource));
reportViewer1.LocalReport.ReportEmbeddedResource = "Gravatun.GraviGrancumReport.rdlc";
reportViewer1.RefreshReport();
的ReportPath财产我也有类似的情况,你是我有一个可以创造服务然后,由于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);