在Visual Studio 2005中使用Crystal Reports(C#.NET Windows应用程序)

我需要在C#.NET Windows应用程序中创建报告。 我有一个SQL Server 2005数据库,Visual Studio 2005,并且可以很好地创建存储过程和数据集。

有人可以指出我正确的方向来创建报告吗? 我似乎无法解决这个问题。 一些例子将是一个良好的开端,或一个简单的操作指南…任何真正比MSDN文档更好的解释。

我正在使用CrystalDecisions.Windows.Forms.CrystalReportViewer控件来显示报告,我认为这是正确的。

如果我即将踏上漫长而复杂的旅程,那么创建和显示可以打印的报告的最简单方法是什么?

我现在已成功完成这项工作。

简要概述

它的工作原理是拥有一个’数据类’,它只是一个包含变量且没有代码的常规C#类。 然后将其实例化并填充数据,然后放入ArrayList中。 ArrayList绑定到报表查看器,以及要加载的报表的名称。 在报表设计器中使用“.Net Objects”,而不是与数据库通信。

说明

我创建了一个类来保存我的报告数据。 我通过手动检索数据库中的数据手动填写此类。 你怎么做这没关系,但这是一个例子:

DataSet ds = GeneratePickingNoteDataSet(id); foreach (DataRow row in ds.Tables[0].Rows) { CPickingNoteData pickingNoteData = new CPickingNoteData(); pickingNoteData.delivery_date = (DateTime)row["delivery_date"]; pickingNoteData.cust_po = (int)row["CustomerPONumber"]; pickingNoteData.address = row["CustomerAddress"].ToString(); // ... and so on ... rptData.Add(pickingNoteData); } 

然后将该类放入ArrayList中。 arraylist中的每个元素对应于完成报告中的一个“行”。

列表中的第一个元素也可以保存报表标题数据,列表中的最后一个元素可以保存报表页脚数据。 因为这是一个ArrayList,可以使用普通的数组访问来获取它们:

 ((CPickingNoteData)rptData[0]).header_date = DateTime.Now; ((CPickingNoteData)rptData[rptData.Count-1]).footer_serial = GenerateSerialNumber(); 

一旦你有一个充满数据的arraylist,就把它绑定到你的报表查看器,其中’rptData’是’ArrayList’类型

 ReportDocument reportDoc = new ReportDocument(); reportDoc.Load(reportPath); reportDoc.SetDataSource(rptData); crystalReportViewer.ReportSource = reportDoc; 

现在,您需要将数据类绑定到报表本身。 你在设计师里面这样做:

  1. 打开“字段资源管理器”选项卡(可能位于“视图”菜单下),然后右键单击“数据库字段”
  2. 点击“项目数据”
  3. 点击’.NET Objects’
  4. 向下滚动列表以查找您的数据类(如果不存在,请编译您的应用程序)
  5. 按’>>’然后确定
  6. 您现在可以将类成员拖到报表上并根据需要进行排列。

Crystal是创建报告的一种可能选择。 它已经存在了很长时间,很多人似乎都喜欢它。

您可能希望了解SQL报告服务。 我已经使用过两者,但我的优先选择是SQL报告服务。 它非常好地集成到工作室中,与其他微软项目类似。 它还免费提供sql express等。

这是关于开始报告服务的好文章: http : //www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-1/

您可以将报表查看器与内置于vs.net(ReportBuilder / ReportViewer控件)中的客户端报表一起使用。 您可以使用与sql报告服务相同的方式创建报告,除了您不需要sql server(也不是asp.net)。 此外,您可以完全控制它们(如何呈现,如何收集数据,生成它们的层,生成后如何处理它们,例如邮寄它们,发送到ftp等)。 您还可以导出为PDF和Excel。

在您的情况下,根据数据和用户输入构建报告,这可能会很有效,因为您可以随时构建自己的数据源和数据。 准备好报告数据后,将其绑定到报告中。

可以在Visual Studio 2005中轻松构建报表(向项目添加报表),并使用ReportViewer控件在Winforms应用程序中显示。

如果对客户端报告感兴趣,我推荐给大家看一本好书。 它提供了许多很棒的信息和许多不同的场景和方法来使用客户端报告。

http://www.apress.com/book/view/9781590598542

我是第二个亚历克斯建议看看sql报告服务 – 如果你有一个sql开发人员许可证,那么你可能已经有了报告服务

我不喜欢水晶报告,设计师(编辑表达式)过多的服务器部署问题(检查那些许可证文件!)

我用的是水晶。 我将简要概述一下我的方法,但请注意,我是一个单人店,它可能无法转换为您的环境。

首先,使用CR Viewer创建表单。 然后:

1)找出您需要的数据,并创建一个检索所需列的视图。 2)使用向导创建一个新的Crystal报表,将您的视图作为数据源。 3)拖放,删除,插入,删除等任何粗略的报表。 是的,这很乏味。 4)创建必要的按钮单击或其他,并创建生成报告的function。 5)将数据检索到DataTable(可能在DataSet中)。 您不必使用该视图。 6)创建报告对象。 将DataTable设置为DataSource。 将报表对象分配给CR Viewer。 这是有一些例子的一部分。

评论:

如果丢失了包含数据库字段等的窗口(Field Explorer),请转到“查看/文档大纲”。 (让比尔盖茨登台并让他找到它是我的幻想。)

设置视图的原因是,如果要添加列,则修改视图,Field Explorer将自动更新。 我在其他方面做了各种各样的麻烦。 此方法也是一种解决方法,需要扫描所有表,重置他们指向的表。 你想把Crystal交给一张桌子。 你不想试图让Crystal连接表等。我不是说它不起作用; 我说这更难。

在Business Objects网站上有关于Crystal的VS实现的文档,但我相信它已经消失在注册/登录屏幕后面。 (我自己可以得到更多信息。)

在我想要的时候,我很难让Crystal进行分页,而且在我不想要的时候没有分页,等等。这与我曾经使用过的最好的报道作者相差甚远,我不明白为什么它似乎放了这么多人失业了。 此外,他们的许可政策很难在一个小型,流动的组织中处理。

编辑添加示例:

 AcctStatement oRpt = new AcctStatement() ; oRpt.Database.Tables[0].SetDataSource(dsRpt.Tables[0]); oRpt.SetParameterValue("plan_title",sPlanName) ; crViewer.ReportSource = oRpt ; 

我发现以下网站解决了我的问题。 包含在这里以供将来参考。

CrystalReportViewer对象模型教程 ,介绍如何使整个工作正常运行。 还设置项目以使用Crystal Reports并专门准备表单并添加控件

我想这可能会帮助你解决http://infynet.wordpress.com/2010/10/06/crystal-report-in-c/

我强烈建议尝试另一种报告解决方案 – 我有很多使用Crystal的经验,并且已经设法在.Net中做了一些时髦的事情,但老实说,Crystal和.Net的集成对于除了最简单的情况。

我试过RS。 我正在从RS转换回Crystal。 RS太沉重和缓慢(或其他东西)。 当Crystal在一秒钟内完成渲染时,没有理由等待30秒才能呈现报告。