使用Report和SubReport的Crystal Reports

本文关键字:Crystal Reports SubReport Report 使用 | 更新日期: 2023-09-27 18:29:38

假设我有以下内容:

public class MyObject
{
   public string Name {get; set;}
   public List<MySubObject> SubObjects {get; set;}
}
public class MySubObject
{
   public string SubName {get; set;}
}

有没有一种方法可以设置一个报告和子报告来显示MyObjects的列表(每个报告都有各自MySubObjects的子报告列表?

使用Report和SubReport的Crystal Reports

我认为您的类定义缺少List<MySubObject>:的名称

public class MyObject
{
   public string Name {get; set;}
   public List<MySubObject> SubObjects {get; set;}
}
public class MySubObject
{
   public string SubName {get; set;}
}

您可以循环并填充数据集(您实际上不需要使用子报表,因为您的数据比上面描述的更复杂):

DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("SubReport");
foreach (MyObject myo in list_of_myobjects)
{
 foreach (MySubObject myso in myo.SubObjects)
 {
  DataRow dr = dt.NewRow();
  dr[0] = myo.Name;
  dr[1] = myso.SubName;
  dt.Rows.Add();
  ds.Tables.Add(dt);
 }
}

然后将您的水晶报告数据源指向数据集:

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
CrystalReport1 objRpt = new CrystalReport1();
objRpt.SetDataSource(ds.Tables[1]);
crystalReportViewer1.ReportSource = objRpt;
crystalReportViewer1.Refresh();