65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (10投票s)

2012年4月23日

CPOL

2分钟阅读

viewsIcon

143312

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

引言

本技巧讨论如何在不使用数据库的情况下,直接从应用程序中的对象列表创建水晶报表。

使用数据库的水晶报表很容易,但如果有人想从表单收集信息并生成报告呢?在本技巧中,我将展示如何创建类并从中生成报告。

准备工作

本技巧基于 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;
            }
        }
    }

我们想要为学生列表生成一个报告,包含他们的 CodeNameAge

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> 

这样就完成了。

© . All rights reserved.