2017-10-10 32 views
0

Iam使用c#构建windows应用程序并在其中包含水晶报表。无法在不同的计算机上安装带有水晶报表的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

你可以在app.config文件作为键添加路径和从您的代码调用它

OR

System.Reflection.Assembly.GetExecutingAssembly() 

OR

System.IO.Path.GetFullPath 
相关问题