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

时间:2020-03-06 15:03:03  来源:igfitidea点击:

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

有人可以为我指出创建报告的正确方向吗?我似乎无法解决。一些示例将是一个好的开始,或者是一个简单的"使用方法"教程...确实比MSDN文档解释得更好的任何事情。

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

如果我要走一段漫长而复杂的旅程,那么创建和显示还可以打印的报告的最简单方法是什么?

解决方案

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

我们可能想看一下SQL报表服务。我都用过,但是我更喜欢SQL报表服务。它已很好地集成到studio中,并且与其他Microsoft项目类似。它也可以与sql express等一起免费使用。

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

我第二个亚历克斯的建议是查看sql报表服务,如果我们拥有sql开发人员许可证,那么我们可能已经拥有了报表服务

我不喜欢水晶报表,设计器中的乏味(始终在编辑表达式),服务器部署问题太多(请检查那些许可证文件!)

我用水晶。我将简要概述我的方法,但请注意,我是一家专人商店,可能无法转换为环境。

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

1)找出所需的数据,并创建一个检索所需列的视图。
2)使用向导创建一个新的Crystal报表,其中将视图作为数据源。
3)拖放,插入,删除以及任何使报表粗糙化的操作。是的,这很乏味。
4)创建必要的按钮单击或者任何其他操作,然后创建用于生成报告的功能。
5)将数据检索到数据表(可能在数据集中)。我们不必使用该视图。
6)创建报告对象。将数据表设置为数据源。将报告对象分配给CR查看器。这是其中有例子的一部分。

评论:

如果丢失带有数据库字段等的窗口(字段资源管理器),请转到"视图/文档大纲"。 (让比尔·盖茨登上舞台并请他找到它是我的幻想。)

设置视图的原因是,如果要添加列,请修改视图,然后"字段资源管理器"将自动更新。我以其他方式遇到各种麻烦。此方法也是一种错误的解决方法,该错误需要扫描所有表以重置它们指向的表。我们想将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 ;

我们可以将报表查看器与vs.net内置的客户端报表一起使用(ReportBuilder / ReportViewer控件)。我们可以像创建sql报表服务一样创建报表,除了不需要sql server(也不需要asp.net)。另外,我们对它们有完全的控制权(如何显示,如何收集数据,在什么层中生成数据,生成后如何处理它们,例如邮寄它们,发送到ftp等)。我们还可以导出为PDF和excel。

在我们根据数据和用户输入来建立报告的情况下,这可能会非常有用,因为我们可以在建立过程中建立自己的数据源和数据。准备好要报告数据之后,将其绑定到报告。

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

如果我们对客户端报告感兴趣,我建议所有人阅读这本书,这是一本很棒的书。它提供了大量有用的信息,并提供了许多不同的方案和使用客户端报告的方式。

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

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

有关如何使整个过程正常运行的教程的CrystalReportViewer对象模型教程。并设置一个项目以使用Crystal Reports
特别是准备表格并添加控件

我强烈建议尝试一种替代报表解决方案,我在Crystal方面有很多经验,并且在.Net中设法做到了一些时髦的事情,但是老实说,Crystal和.Net的集成绝对是最简单的东西案件。

我现在设法完成了这项工作。

简要概述

它通过拥有一个"数据类"来工作,该数据类只是一个包含变量而没有代码的常规C类。然后将其实例化并填充数据,然后将其放置在ArrayList中。 ArrayList与要加载的报告的名称绑定到报告查看器。在报表设计器中,将使用" .Net对象",而不是与数据库进行通信。

解释

我创建了一个类来保存报告数据。我通过从数据库中手动检索数据来手动填充此类。操作方式无关紧要,但这是一个示例:

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,因此可以使用常规的Array访问来获取它们:

((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;

现在,我们需要将数据类绑定到报表本身。我们可以在设计器内执行此操作:

  • 打开"字段资源管理器"标签(可能在"查看"菜单下),然后右键单击"数据库字段"
  • 点击"项目数据"
  • 点击" .NET对象"
  • 向下滚动列表以找到数据类(如果不存在,请编译应用程序)
  • 按" >>",然后单击"确定"。
  • 现在,我们可以将班级成员拖到报表上,并根据需要安排他们。

我认为这可以
http://infynet.wordpress.com/2010/10/06/crystal-report-in-c/