我最近开始在C#Windows应用程序(窗体)中将最新版本的Crystal Reports与Visual Studio 2010和SharpDevelop一起使用。我已经从SAP下载了Visual Studio 2010的最新Crystal DLL,并手动创建了对以下内容的引用

using CrystalDecisions.CrystalReports;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.ReportSource;

然后,我创建一个ReportDocument,以便可以打开一个rpt文件:
ReportDocument rptDoc = new ReportDocument();

所有这些都可以编译。当我尝试使用rtpDoc对象执行任何操作时,就会出现问题。
rptDoc.Load(@"c:\DialLeadsByDistributor.rpt");

好像编译器没有意识到它是一个类对象,尽管事实是当我将鼠标悬停在变量上时,它正确地将其报告为CrystalDecisions.CrystalReports.Engine.ReportDocument,但intellisense不仅不向我显示该对象的任何方法或属性,我得到了以下是我遇到的编译器错误:



引用上述声明为违规行...

任何人都可以阐明这一点吗?如果我看一下ReportDocument类的元数据确实包含三个Load方法,则第一个采用一个字符串,即rpt文件路径。在Visual Studio 2010和SharpDevelop中都出现此问题的事实至少是一致的,但对我而言仍然没有意义。

最佳答案

尝试以下代码...它在VS2010和sharpdevelop4中都可以使用:

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

namespace myapp
{

public partial class tstfrm1 : Form
{
    public tstfrm1()
    {

        InitializeComponent();

        ReportDocument rptDoc = new ReportDocument();
        rptDoc.Load(@"C:\CrystalReport1.rpt");
        /*If you have a datasource, link it like below*/
        //rptDoc.SetDataSource(dataset.Tables["tripsheet"]);
        CrystalReportViewer crystalReportViewer1 = new CrystalReportViewer();
        crystalReportViewer1.ReportSource = rptDoc;
        crystalReportViewer1.Refresh();
        this.Controls.Add(crystalReportViewer1);
        crystalReportViewer1.Dock = DockStyle.Fill;
    }
}

}

10-04 09:53