C# Winforms Crystal Report Viewer 的新形式

Posted

技术标签:

【中文标题】C# Winforms Crystal Report Viewer 的新形式【英文标题】:C# Winforms Crystal Report Viewer in new form 【发布时间】:2014-01-21 19:55:15 【问题描述】:

我有一个表单,我从文本框中获取一些数据到硬类型数据集 myDataSet 中。我创建了一个类型化的 Crystal Report myReport。当我单击按钮时,我想打开新表单并将报表加载到 Crystal Report Viewer myViewer 中。这里我有一个问题。我不知道如何将数据输入 myViewer。

这是我尝试过的:

myDataSet ds = new myDataSet();
getData(out ds);
myReportForm viewForm = new myReportForm();
viewForm.Owner = this;

myReport report = new myReport();
report.SetDataSource(ds);

//How do I get this report into new form which has Report Viewer??
//I thought it would be something like (doesnt work):
//
//viewForm.myViewer.ReportSource = ds;

viewForm.ShowDialog(this);

【问题讨论】:

【参考方案1】:

这就是我使用 Crystal Report 查看器在新表单中显示报表的方法,使用表单变量来设置报表变量:

ReportDocument myReport = new ReportDocument();                
string reportPath = Path.Combine(REPORT_PATH, "myReport.rpt");
myReport.Load(reportPath);                
DataTable dt = myTableAdapter.GetDataByID(txtID.Text);
myReport.SetDataSource(dt.DefaultView);
myReport.SetParameterValue("ID", txtID.Text);
frmReportViewer frm = new frmReportViewer(myReport);
frm.Show();

GetDataByID 是使用设计器添加的自定义查询。传递到 frmReportViewer 的报表被传递到 CrystalReport 查看器的 ReportSource。

【讨论】:

【参考方案2】:

执行以下步骤

1.在工具箱中创建一个名为myReportForm 的新Form 添加crystalReportViewer

2.打开你的Debug文件夹并添加一个名为Reports的新文件夹,将你的报告复制到文件夹中

3.一定要加using CrystalDecisions.CrystalReports.Engine;

try
 

  Cursor = Cursors.WaitCursor;
  ReportDocument myReport = new ReportDocument();
  string reportPath = (Application.StartupPath + @"ReportPath");
  var ds = new DataSet();
  String SqlQuery = "Query";
  var adapter = new SqlDataAdapter(SqlQuery, connectionString);
  adapter.Fill(ds, "Table or View Name");
  myReport.Load(reportPath);
  myReport.SetDataSource(ds);
  var frm = new myReportForm();
  frm.crystalReportViewer1.ReportSource = myReport;
  frm.Show();

 
 catch (Exception ex)
 
  MessageBox.Show(ex.Message);
 
 Cursor = Cursors.Default;

【讨论】:

【参考方案3】:

假设myReportCrystalDecisions.CrystalReports.Engine.ReportDocuemnt 类型,您需要将ReportSource 设置为报告。

viewForm.myViewer.ReportSource = myReport;

同样基于您的示例,您需要确保表单上的CrystalReportViewerpublic,否则您将无法从类外部访问它的属性。

还有一点需要注意的是,你的类名应该遵循 .Net 命名约定

myReportForm 应该是 MyReportForm 等等...

【讨论】:

以上是关于C# Winforms Crystal Report Viewer 的新形式的主要内容,如果未能解决你的问题,请参考以下文章

Crystal Reports 使用多个表格 - 不能完全正确

Crystal Reports (C#):信息显示不正确

在 C# 中运行时更改 Crystal Report 数据源(访问)

使用 Access 数据库和 Crystal Reports 发布 C# 应用程序

如何在 C# 中使用特定的 INNER JOIN 查询和条件制作 Crystal Report

在 Crystal Report 和 ASP.NET C# 中使用子报表