C#以新的形式Winforms Crystal Report Viewer

时间:2014-01-21 19:55:15

标签: c# winforms crystal-reports

我有一个表单,我从文本框中获取一些数据到硬类型DataSet 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);

3 个答案:

答案 0 :(得分:0)

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

viewForm.myViewer.ReportSource = myReport;

根据您的示例,您需要确保表单上的CrystalReportViewerpublic,否则您无法从课堂外访问该属性。

另外需要注意的是,您应遵循类名的.Net命名约定

myReportForm应为MyReportForm等......

答案 1 :(得分:0)

我这样做是为了使用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 :(得分:0)

执行以下步骤

1。创建一个名称为Form的新myReportForm,并在工具箱中添加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;