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

设计和集成 Crystal Reports

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.36/5 (9投票s)

2007年8月8日

5分钟阅读

viewsIcon

63752

downloadIcon

1116

为您的应用程序提供专业外观的报表。

引言

我最近为一个项目开发了一个报告模块,其中所有报告都需要转换为 Crystal Reports。我使用了各种推送/拉取模型并进行了一些研究。我遇到的问题是,我想摆脱 Crystal Reports 对数据库的独占依赖,即“如果应用程序可以访问数据库,那么 Crystal Reports 也应该可以”。我发现的最好方法是通过数据集架构。有多种方法可以做到这一点,我将介绍一种简单的、你可以用来做这件事的方法。

我将采用一种循序渐进的方法,这对我自己来说更容易理解,而不是零散的片段。

将 Crystal Report 包含到你的项目中

要将 Crystal Report 包含到你的项目中,请右键单击项目并选择“添加新项”,然后选择“Crystal Report”。将 Crystal Report 命名为你想要的任何名称,例如“Accounts Detail Report”。为了简单起见,在此示例应用程序中我将其命名为“Report1”。过程如下面的图像所示。

Screenshot - img1.jpg

从弹出的对话框中选择 Crystal Report,如下面的图所示

Screenshot - img2.jpg

添加报告后,它会立即询问你要在项目中添加哪种类型的报告。对于此方法,请选择“空白报告”,如下面的图所示

Screenshot - img3.jpg

现在报告已包含在你的项目中,并且“解决方案资源管理器”会在项目文件中显示它。在后台,Visual Studio 会生成一个与报告同名的类,但我们不必担心它。

设计报告

要设计报告,Crystal Report 需要知道要显示什么数据。因此,我们需要指定将作为输入提供给报告的数据。通常,当我们谈论报告时,通常会有一个数据网格或某种格式的现有报告,其输入为数据集。使用数据集,我们可以通过简单地调用“WriteXMLSchema”来获取数据架构。这只需要一次来设计报告,之后可以将其注释掉或从代码中删除,或者作为替代方案,可以添加并配置 xsd。我包含的示例应用程序从名为 Books 的数据库获取数据集,执行查询以获取数据并将其填充到数据集中。然后我调用“WriteXMLSchema”方法来获取数据集的架构。

try

{

// getting the dataset

string connString = System.Configuration.ConfigurationSettings.AppSettings.Get("ConnectionString");

string query = "Select * from book";

conn = new OleDbConnection(connString);

conn.Open();

da = new OleDbDataAdapter(query, conn);

ds = new DataSet();

da.Fill(ds);

// writing schema of dataset to a file

// This should be commented once the report is designed

//ds.WriteXmlSchema(@"C:\reportSchema.xml"); 



// Crystal report code here

Report1 rpt1 = new Report1();

rpt1.SetDataSource(ds);

crystalReportViewer1.ReportSource = rpt1;



}

catch (Exception ex)

{

MessageBox.Show("Error in report" + ex.Message);

}

finally

{

conn.Close();

}

一旦有了架构,只需注释掉“WriteXMLSchema”,然后双击解决方案资源管理器中的报告。现在我们需要向 Crystal Report 指定我们将要传递给它的数据集。如下面的图所示

Screenshot - img4.jpg

为此,右键单击“字段资源管理器”中最顶层的字段“数据库专家”。在弹出的菜单中,展开“创建新连接”,然后展开“ADO.NET”。将弹出一个对话框,要求输入文件路径,只需浏览到使用 WriteXMLSchema 保存 XML 架构的文件,类似于下面的图所示

Screenshot - img5.jpg

数据库专家会读取数据集架构,并在可用表列表中显示一个数据集。

Screenshot - img6.jpg

选择“表”,将其添加到选定的表中,然后点击“确定”。数据库专家现在显示了数据集中包含的所有字段。只需将你想在报告中显示的字段拖到“详细信息”部分以用于重复记录,Crystal Reports 会自动生成标题。你可以通过右键单击并选择“格式化对象”来重命名或修改它。

Screenshot - img7.jpg

完成报告设计,并添加任何其他特殊字段,方法是右键单击报告并选择“添加特殊字段”,用于打印日期、时间、页码、页眉、页脚等字段。完成后,关闭报告并保存更改。

将数据传递给 Crystal Report

要在窗体上显示 Crystal Report,你应该有一个 Crystal Report Viewer 控件,它在工具箱的 Crystal Reports 部分下可用。如果你将其拖到窗体上,它将包含运行 Crystal Report 所需的所有引用。因此,只需拖放一个 Crystal Report Viewer 控件并设置属性。我们用于生成 XML 的数据集现在应该传递给此报告。这可以通过实例化 Crystal Report 对象(Visual Studio 为你生成的与报告同名的类)并传递数据集来完成,然后设置报告源属性,如下面的代码片段所示

Report1 rpt1 = new Report1();

rpt1.SetDataSource(ds);

crystalReportViewer1.ReportSource = rpt1;

使用示例代码和测试应用程序

我包含的数据库脚本、完整的代码和解决方案文件可用于在 SQL Server 2005 或 2000 上运行以创建数据库。你可以在 app.config 中配置连接字符串,以适应你的设置和数据库信息。

摘要

这种方法有好有坏。好的地方在于它非常容易快速开发设计,并且与数据集结合使用可以实现清晰的实现,因此你可以真正专注于架构和组件的工作。最大的问题在于当报告需要更改并且你必须包含更多字段时,这会花费更长的时间,因为你必须将其添加到你的数据集中,然后重新设计报告,而不是仅仅添加一个字段。如果你有其他方法可以做到,我很乐意倾听你的意见,请给我反馈,或者在遇到任何问题时随时提出讨论。

© . All rights reserved.