我使用c#构建windows应用程序并在其中包含水晶报告。
我的问题是我使用了加载crystalreport.rpt文件的代码来自我开发应用程序的计算机中的位置。
问题正好在这行代码中。
cryRpt.Load("PUT CRYSTAL REPORT PATH HERE\CrystalReport1.rpt");
现在每当我尝试在不同的计算机上运行应用程序时,它都无法找到.rpt文件,我的报告也无法正常工作。
这是完整的代码。
using System;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ReportDocument cryRpt = new ReportDocument();
TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo crConnectionInfo = new ConnectionInfo();
Tables CrTables ;
cryRpt.Load("PUT CRYSTAL REPORT PATH HERE\CrystalReport1.rpt");
crConnectionInfo.ServerName = "YOUR SERVER NAME";
crConnectionInfo.DatabaseName = "YOUR DATABASE NAME";
crConnectionInfo.UserID = "YOUR DATABASE USERNAME";
crConnectionInfo.Password = "YOUR DATABASE PASSWORD";
CrTables = cryRpt.Database.Tables ;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in
CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = crConnectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
}
crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh();
}
}
}
如何让我的报告在任何计算机上运行?
答案 0 :(得分:0)
您可以将app.config文件中的路径添加为密钥,并从代码
中调用它OR
System.Reflection.Assembly.GetExecutingAssembly()
OR
System.IO.Path.GetFullPath