首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual Studio LocalReport对象和ReportViewer

Visual Studio LocalReport对象和ReportViewer
EN

Stack Overflow用户
提问于 2012-01-17 04:44:50
回答 2查看 4.4K关注 0票数 2

有没有一种方法可以处理一个LocalReport对象(完成这个部分),然后在ReportViewer控件中的另一个窗体上显示它?这个想法是在没有ReportViewer的情况下打印(已经完成),但是,如果用户想要打印,也可以预览他要打印的内容。

我使用的是Visual Basic .NET SDK3.5和Visual Studio2008。如果需要,也可以使用2010。

我试着这样做:

代码语言:javascript
复制
ReportViewer1.LocalReport = myLocalReport 

但不幸的是,因为ReportViewer上的LocalReport属性是只读的...

对此有什么提示吗?提前谢谢。

(我知道要使用ReportViewer1.LocalReport方法执行此操作。我只想创建一个单独的代码,并将其直接绑定到打印机或预览表单)

EN

回答 2

Stack Overflow用户

发布于 2012-01-29 04:37:36

LocalReport为只读,但ReportPath和ReportEmbeddedResource是可设置的

尝试这样做,或者如果您的报表未嵌入,请尝试设置LocalReport的ReportPath属性

代码语言:javascript
复制
reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("GravatomsReportRegister", GravatomsFullInfoByIdBindingSource));
            reportViewer1.LocalReport.ReportEmbeddedResource = "Gravatun.GraviGrancumReport.rdlc";
            reportViewer1.RefreshReport();
票数 0
EN

Stack Overflow用户

发布于 2013-01-15 08:43:24

我有一个类似的情况,因为我有一个服务,可以创建一个本地报告,然后可以生成一个文件,电子邮件等。然而,因为ReportViewer.LocalReport是一个只读属性,我不得不复制代码用于建立报告或复制的值从我的LocalReport到ReportViewer.LocalReport。我对这两种选择都不感兴趣,因为要么可能无法复制(例如子报告事件),要么存在代码重复。

我想出了以下扩展来设置带有反射的ReportViewer上的LocalReport。我还没有完全测试这一点,这可能是一个坏主意!然而,它似乎适用于我目前正在从事的项目。我不知道ReportViewer是否对它的本地报告做了一些额外的初始化,所以可能会有一些东西爆炸……

我再怎么强调也不为过--使用风险自负--可能不是一个好主意,

代码语言:javascript
复制
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();
    }
}

用法:

代码语言:javascript
复制
LocalReport localReport = reportService.GenerateCurrentOrdersReport(....);
reportViewer.SetLocalReport(localReport);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8886031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档