在应用程序中从对象列表动态创建水晶报表文档






4.73/5 (10投票s)
如何在应用程序中从对象列表动态创建水晶报表文档
引言
本技巧讨论如何在不使用数据库的情况下,直接从应用程序中的对象列表创建水晶报表。
使用数据库的水晶报表很容易,但如果有人想从表单收集信息并生成报告呢?在本技巧中,我将展示如何创建类并从中生成报告。
准备工作
本技巧基于 Visual Studio 2010 环境和 Crystal Report for VS 2010,请确保您已准备好它们。
我们将要做什么?
我们将创建一个应用程序,创建一些 student
对象,并使用输入的数据生成报告。
开始吧
首先,创建一个水晶报表项目

在下一个窗口中,选择“空白报表”。
现在创建一个 Student
类,如下所示
class Student
{
public Student(string Code, string Name, DateTime BirthDate)
{
this.Code = Code;
this.Name = Name;
this.BirthDate = BirthDate;
}
public string Code { set; get; }
public string Name { set; get; }
public DateTime BirthDate { set; get; }
public int Age
{
get
{
int now = DateTime.Now.Year;
int birth = BirthDate.Year;
return now - birth;
}
}
}
我们想要为学生列表生成一个报告,包含他们的 Code
、Name
和 Age
。
在 Form1
中,我们手动创建一个学生列表
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List<Student> GetStudentList()
{
Student s1 = new Student("1000001", "Ashkan Power", DateTime.Parse("17/7/1989"));
Student s2 = new Student("1000002", "Peter Griffin", DateTime.Parse("10/2/1960"));
Student s3 = new Student("1000003", "Super Man", DateTime.Parse("1/1/1980"));
Student s4 = new Student("1000004", "Jim Carry", DateTime.Parse("14/5/1985"));
Student s5 = new Student("1000005", "Bill Carter", DateTime.Parse("25/8/1940"));
return new List<Student>() { s1, s2, s3, s4, s5 };
}
}
现在让我们创建报告
打开“CrystalReport1.rpt”,它已经在您的项目中创建好了。
根据您的喜好自定义报告,我的报告如下所示

现在是时候创建一个 Dataset
了
- 右键单击您的项目 / 添加 / 新建项目
- 从左侧选择数据 / 选择
Dataset
并输入您的Name
现在在您的 DataSet
中,添加一个新的 DataTable
,命名为“Students
”。
添加 3 列“Code
”、“Name
”和“Age
”。它应该如下所示

在报告中的字段资源管理器中,右键单击数据库字段 / 数据库专家,然后在打开的窗口中,选择项目数据 / ADO.NET 数据集 / [您的数据集名称],并将其添加到右侧列表

现在打开数据库字段,您将看到 Students
表和字段。
将每个字段拖放到 详细信息
部分的相应位置。
在数字列中插入一个记录编号(来自特殊字段),如果需要,可以删除列标题。

好的,现在我们只需要在表单上显示报告,并将 student
列表传递给报告。
在 Form1
中,在构造函数或加载事件侦听器中,您可以将报告的实例传递给您的 reportviewer
,并将 students
列表作为 datasource
。
public Form1()
{
InitializeComponent();
CrystalReport1 cr = new CrystalReport1();
crystalReportViewer1.ReportSource = cr;
cr.SetDataSource(GetStudentList());
}
一切看起来都很好。您可以运行应用程序并查看结果。
但是,您可能会收到一个 FileNotFoundException
,错误字符串为“无法加载文件或程序集 'file:///C:\Program Files\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet1\crdb_adoplus.dll' 或其依赖项。系统找不到指定的文件。”
您可以通过像这样修改项目的 app.config 文件来解决此问题
(如果您没有 app.config,请从 addItem / General / 应用程序配置文件将其添加到您的项目中。)
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0"
sku=".NETFramework,Version=v4.0"/></startup>
</configuration>
这样就完成了。