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】:假设myReport
是CrystalDecisions.CrystalReports.Engine.ReportDocuemnt
类型,您需要将ReportSource
设置为报告。
viewForm.myViewer.ReportSource = myReport;
同样基于您的示例,您需要确保表单上的CrystalReportViewer
是public
,否则您将无法从类外部访问它的属性。
还有一点需要注意的是,你的类名应该遵循 .Net 命名约定
myReportForm
应该是 MyReportForm
等等...
【讨论】:
以上是关于C# Winforms Crystal Report Viewer 的新形式的主要内容,如果未能解决你的问题,请参考以下文章
Crystal Reports 使用多个表格 - 不能完全正确
在 C# 中运行时更改 Crystal Report 数据源(访问)
使用 Access 数据库和 Crystal Reports 发布 C# 应用程序