如何从VS2010启动水晶报告查看器?

时间:2014-01-23 03:19:30

标签: visual-studio-2010 crystal-reports

我已安装了所有这些帖子中链接的CR_for_VS_13_0_4.exe程序,但我不知道用什么代码来实际启动“.rpt”文件。我正在使用:

process.start("myfile.rpt")

但它会启动报表设计器,而不是查看器。如何确保在运行我的应用程序的客户端上启动查看器?

感谢。

1 个答案:

答案 0 :(得分:0)

通过使用myfile.rpt启动进程,您告诉Windows使用与.rpt文件关联的程序打开文件:在您的计算机上,这可能是CR设计人员;在用户的计算机上,可能没有与.rpt文件关联的程序。

而不是“启动”myfile.rpt,我认为您需要做的事情(尽管我已经使用CR与.NET一段时间)是实例化一个CR查看器对象,它应该显示报告设为myfile.rpt

在VS 2010中使用CR查看器时考虑related SO post

<强>更新

关于你为所有内容编写代码而不是使用VS工具箱的评论,我使用CR for VS 2010下载并修改了一下,以便为您成功完成PoC:

PoC Project in VS 2010 Solution Explorer

using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        // the CR viewer
        private CrystalDecisions.Windows.Forms.CrystalReportViewer crystalReportViewer1;

        public Form1()
        {
            InitializeComponent();

            // 
            // crystalReportViewer1
            // 
            this.crystalReportViewer1 = new CrystalDecisions.Windows.Forms.CrystalReportViewer();

            // FORNOW: just some "who cares" setup assignments for PoC - to be adjusted of course
            this.crystalReportViewer1.ActiveViewIndex = -1;
            this.crystalReportViewer1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.crystalReportViewer1.Cursor = System.Windows.Forms.Cursors.Default;
            this.crystalReportViewer1.Location = new System.Drawing.Point(0, 0);
            this.crystalReportViewer1.Name = "crystalReportViewer1";
            this.crystalReportViewer1.Size = new System.Drawing.Size(150, 150);
            this.crystalReportViewer1.TabIndex = 3;

            // FORNOW: a DataSet1 as a dummy data source for PoC - really to be loaded with meaningful data of course
            DataSet1 ds1 = new DataSet1();
            ds1.Tables["DataTable1"].Rows.Add(new object[] { 25 }); // whatever - just some data for PoC

            // the CR document - myfile.rpt
            ReportDocument reportDocument1 = new ReportDocument();
            reportDocument1.Load("myfile.rpt");
            // See the note regarding the next statement that follows the code.
            reportDocument1.SetDataSource(ds1); // set to use our dummy data source for PoC

            // the CR viewer set to use the CR document
            this.crystalReportViewer1.ReportSource = reportDocument1;

            // the CR viewer added to the form's controls
            this.Controls.Add(this.crystalReportViewer1);

            // etcetera
        }

        // etcetera
    }
}

如果您的目标是.NET 4.0,除非您将以下内容添加到FileNotFoundException,否则crdb_adoplus.dll会遇到关于reportDocument1.SetDataSource(ds1);的{​​{1}}:

app.config

有关详细信息,请参阅SAP Note 1525432 - Could not load file or assembly 'file:///crdb_adoplus.dll' or one of its dependencies

最后一点,尽管可以在没有VS工具箱的情况下完成,但我强烈建议您使用它为表单的{{1}中的CR查看器添加大量的设计时代码文件并将表单的<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup> 文件集中在需要编写的更有意义的代码上以呈现报告。但是,TIMTOWDI。

快乐的报道!