C# 以单独的形式预览Crystal报告

C# 以单独的形式预览Crystal报告,c#,winforms,crystal-reports-xi,C#,Winforms,Crystal Reports Xi,我有一个表单,允许用户选择他们想要生成的报告。他们还可以选择条件、选择打印、预览、导出等。在用户做出选择并单击“生成”按钮后,我有一个类来创建报表对象、加载报表、数据集,然后打印或导出报表。我创建了一个单独的表单来预览报告。当我将报表对象传递给预览表单时,我收到“无效报表源”。报表打印和导出很好,我无法预览报表。我不想在预览表单中复制代码,我希望我可以传递报表对象。下面是我的代码片段。有什么建议吗 public static class CrystalReportUtilities {

我有一个表单,允许用户选择他们想要生成的报告。他们还可以选择条件、选择打印、预览、导出等。在用户做出选择并单击“生成”按钮后,我有一个类来创建报表对象、加载报表、数据集,然后打印或导出报表。我创建了一个单独的表单来预览报告。当我将报表对象传递给预览表单时,我收到“无效报表源”。报表打印和导出很好,我无法预览报表。我不想在预览表单中复制代码,我希望我可以传递报表对象。下面是我的代码片段。有什么建议吗

public static class CrystalReportUtilities
{
    private static ReportDocument goReport {get; set;}
    private static string gsReportName { get; set; }
    private static string gsSqlString { get; set; }
    private static object[,] goParameters { get; set; }

    public static void generateReport(parameters...)
    {
      goReport = loadReport();
...
      goReport.SetDataSource(DataTable);
...
      previewReport();


    private static void previewReport()
    {
        CrystalReportPrintPreviewForm loReportPreview = new CrystalReportPrintPreviewForm(goReport);
        loReportPreview.ShowDialog();
    }


public partial class CrystalReportPrintPreviewForm : Form
{
    private ReportDocument goReport;

    public CrystalReportPrintPreviewForm(ReportDocument poReport)
    {
        InitializeComponent();

        goReport = poReport;
    }

    private void crystalReportViewer1_Load(object sender, EventArgs e)
    {
        try
        {
            if (goReport != null)
            {
                crystalReportViewer1.ReportSource = goReport;  // Receive "Invalid Report Source"
            }
        }

问题解决了。我运行的是Windows7,64位操作系统。我最初安装了64位Visual Studio 2010的Crystal Reports。您似乎需要使用SP4的64位和32位版本的运行时。

因此,我更改了预览表单,以便不再将报告传递到表单、表单和类中。我更改了类中的方法,使其在加载报表后返回ReportDocument。在我的表单中,我调用load方法并设置数据源。现在加载表单,但我得到错误消息:找不到方法“'Void CrystalDecisions.Shared.PageRender.set_ExceptionWIndowTitle(System.String)”。我正在尝试跟踪此问题。