我最近开始在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
,但智能感知不仅没有向我显示任何方法或对象的属性,我得到以下编译器错误,让我难过:
无效的令牌'('在类,结构或接口成员声明中
将上述陈述称为违规行......
任何人都可以对此有所了解吗?如果我查看ReportDocument类的元数据,它确实包含三个Load方法,第一个方法接受一个字符串,即rpt文件路径。在Visual Studio 2010和SharpDevelop中出现此问题的事实至少是一致的,但对我来说仍然没有意义。
答案 0 :(得分:1)
尝试此代码......它在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;
}
}
}
答案 1 :(得分:-1)
尝试摆脱@符号。我目前正围绕同样的想法建立一个程序,我没有包含这个标志,也没有问题。