使用Crystal Reports ReportDocument

9

最近我在使用最新版的Crystal Reports,结合Visual Studio 2010和SharpDevelop进行C# windows应用程序(窗体)开发。我从SAP下载了适用于Visual Studio 2010的最新版Crystal DLLs,并手动创建了以下引用。

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中都出现了,至少是一致的,但对我来说仍然毫无意义。

语法错误在哪里?发一下更多的代码……rptDoc.Load()放哪里了? - dotjoe
2个回答

2

尝试使用以下代码...它可以在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

尝试去掉@符号。我正在围绕相同的想法构建一个程序,没有包含这个符号,也没有任何问题。


3
在C#中,@符号用于将字符串视为字面量。反斜杠(\)是转义字符。 - reckface

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接