0

我为我的 Windows 项目创建了一些 Crystal Reports。当我在 Visual Studio 上运行它们时,它们运行良好。(我正在使用 VS 2010)。但是在我创建安装项目并在客户端 PC 上安装软件后,它们将无法工作。我收到以下错误:

http://tistus.srilanka-erickson.com/errors.html

下面显示的是我用来加载水晶报表的按钮点击事件代码: 第一个 try 子句用于注册报表的自定义输入,同时第二个 try 子句用于手动创建与报表的数据库连接。第三个 try 子句仅用于加载报告。

private void buttonGenerateSecExportRpt_Click(object sender, EventArgs e)
    {
        CrystalDecisions.CrystalReports.Engine.ReportDocument cryRpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
        if (comboBoxSecPlateType.Text != "" && comboBoxSecExPlateBrand.Text != "")
        {
            try
            {
                dtFrom.Format = DateTimePickerFormat.Custom;
                string periodfrom = dtFrom.Value.ToString("yyyy/MM/dd");
                dtTo.Format = DateTimePickerFormat.Custom;
                string periodto = dtTo.Value.ToString("yyyy/MM/dd");

                //cryRpt.VerifyDatabase();
                string fullPath = "..\\..\\SecondaryPlateExportReport.rpt";
                cryRpt.Load(fullPath);
                cryRpt.SetParameterValue("dateFromChecked", dtFrom.Checked);
                cryRpt.SetParameterValue("dateToChecked", dtTo.Checked);
                cryRpt.SetParameterValue("dtPeriodFrom", periodfrom);
                cryRpt.SetParameterValue("dtPeriodTo", periodto);
                cryRpt.SetParameterValue("PlateType", comboBoxSecPlateType.Text.Trim());
                cryRpt.SetParameterValue("PlateBrand", comboBoxSecExPlateBrand.Text.Trim());

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            try
            {
                DbConnectionInfo.SetConnectionString(ConfigurationManager.ConnectionStrings["con"].ToString());
                TableLogOnInfo logOnInfo;
                ConnectionInfo connectionInfo;
                foreach (Table table in cryRpt.Database.Tables)
                {
                    logOnInfo = table.LogOnInfo;
                    connectionInfo = logOnInfo.ConnectionInfo;
                    // Set the Connection parameters.
                    connectionInfo.DatabaseName = DbConnectionInfo.InitialCatalog;
                    connectionInfo.ServerName = DbConnectionInfo.ServerName;
                    if (!DbConnectionInfo.UseIntegratedSecurity)
                    {
                        connectionInfo.Password = DbConnectionInfo.Password;
                        connectionInfo.UserID = DbConnectionInfo.UserName;
                    }
                    else
                    {
                        connectionInfo.IntegratedSecurity = true;
                    }
                    table.ApplyLogOnInfo(logOnInfo);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            try
            {
                crystalReportViewerSecEx.ReportSource = cryRpt;
                crystalReportViewerSecEx.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        else
        {
            MessageBox.Show("Please select both Plate Type and the Brand to Generate the Report!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

我想在客户端 PC 上部署软件后使水晶报告工作。任何建议将不胜感激!

4

2 回答 2

2
crystalReport.Load(@"C:\WINDOWS\Temp\samridhi.rpt");

当你创建设置时把你的水晶报告路径像这样

转到“ C:\WINDOWS\Temp

并通过 mycomputer 复制你的 rpt 和 .cs 文件到“ C:\WINDOWS\Temp ”,而不是通过运行提示


对于不设置只是为了检查项目应用程序中的水晶报告路径,这里是

路径是

  crystalReport.Load(System.Windows.Forms.Application.StartupPath + "\\samridhi.rpt");
于 2012-11-24T09:55:18.767 回答
0

佘涵,

最好不要在任何 .NET 项目中使用硬编码路径。最好使用 Server.MapPath 变量并动态构建字符串。

例如,将 using System.IO 添加到您的项目中。然后,您可以使用 Path.Combine 方法来构建您的字符串。

    string mappath = HttpContext.Current.Server.MapPath("~/");
    Path.Combine(mappath, "Report Folder Path", "FileName.rpt");

您甚至可以将“报表文件夹路径”放入静态字符串中,这样就可以多次调用它而不必担心更改。

于 2012-08-10T19:23:54.257 回答