2008-10-02 151 views
9

我需要在C#.NET Windows应用程序中创建报告。我有一个SQL Server 2005数据库,Visual Studio 2005,并且在创建存储过程和数据集方面相当不错。在Visual Studio 2005中使用Crystal Reports(C#.NET Windows应用程序)

有人可以请我指出创建报告的正确方向吗?我似乎无法完成。一些例子将是一个好的开始,或者一个简单的操作指南......任何事情都比MSDN文档更好解释。

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

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

回答

4

我已成功地完成这项工作了。

简要概述

它通过具有“数据类”,这仅仅是包含变量和无码一个常规的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,正常的数组访问可以被用来获取他们:

((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对象
  4. 向下滚动列表,找到您的 数据类(如果它不存在, 编译应用程序)
  5. 按下‘>>’,然后确定
  6. 您现在可以拖动类成员 转化为报告并将它们排列为您想要的 。
+0

我发现了一个更好,更简单的方法... http://arcanecode.com/2009/02/09/using-a-local-reporting-services-2008-report-with-an-adonet-data-集/#评论 - 27511 – Piku 2010-02-19 12:45:13

3

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

您可能想看看SQL报告服务。我已经使用,但我的首选是SQL报告服务。它很好地集成到工作室中,并且与其他微软项目类似。它也可以自由使用SQL表达等

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

+1

除了你不喜欢它之外,这与Crystal报告有什么关系? – rball 2010-06-09 23:09:33

1

我第二次亚历克斯的建议,看看SQL报告服务 - 如果你有一个SQL开发人员许可证,那么你也许已经报告服务

我不喜欢水晶报表,太多沉闷的设计师(编辑表达所有的时间)太多的服务器部署问题(检查这些许可文件!)

1

我用水晶。我会简要介绍一下我的方法,但请注意,我是一个单店,它可能不会转化为您的环境。

首先,用CR查看器创建表单。然后:

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

评论:

如果失去与数据库字段等(字段资源管理器)的窗口,去查看/文档大纲。 (我的幻想是将Bill Gates放在舞台上并要求他找到它。)

设置视图的原因是,如果要添加列,请修改视图,然后Field Explorer将会自动更新。我在其他方面做了各种各样的麻烦。这个方法也是一个解决bug的方法,它需要扫描所有表,重置它们指向哪个表。你想把水晶手表放在一张桌子上。你不想尝试让Crystal加入表格等。我不说这不起作用;我说这很难。

有(或曾经),用于对业务的执行VS水晶的文档对象的网站,但我相信,它已经消失在注册/登录屏幕后面。 (我可以忍受更多信息对我自己。)

我有麻烦水晶页休息时,我想,而不是分页符的时候,我不想等,这是迄今为止最好报表生成器我我曾经使用过,我不明白为什么它似乎让很多人失业。另外,他们的许可政策在一个流动性小的组织中很难处理。

编辑补充例如:

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

您可以使用内置到vs.net客户端报告(的ReportBuilder/ReportViewer控件)报表查看器。您可以像创建SQL报告服务一样创建报告,除非您不需要sql服务器(也不需要asp.net)。此外,您可以完全控制它们(如何呈现,如何收集数据,生成的图层,生成后用户如何处理它们,如发送邮件,发送到ftp等)。您也可以导出为PDF和Excel。

而在你的情况下建立的数据和用户输入的报告,这可能会工作带来极大的为你走,你可以建立自己的数据源和数据。一旦您的数据准备好进行报告,将其绑定到您的报告。

报告可以很容易地建立在Visual Studio 2005中(添加到您的项目报告),并在使用ReportViewer控件WinForms应用程序中显示。

这是一本很棒的书,我建议大家看看是否对客户端报告感兴趣。它提供了很多很好的信息和许多不同的场景以及使用客户端报告的方法。

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

0

我强烈建议尝试使用其他报告解决方案 - 我有很多的水晶经验,并已成功地做一些时髦的东西与它在.NET中,但坦白的整合除了最简单的情况外,.Net是绝对的猪。

0

我已经试过RS。我从RS转换回Crystal。 RS太重了,太慢了(或者什么)。没有理由不得不等待30秒才能让报告渲染,当Crystal在一秒钟内完成渲染时就是RS。

相关问题