我需要建立一个C#.NET Windows应用程序的报告。 我有一个SQL Server 2005数据库,Visual Studio 2005和我与创建存储过程和数据集相当确定。
可有人请点我在制作报告的方向是正确的? 我好像不能做出来。 一些例子将是一个良好的开端,还是一个简单的操作方法教程......什么真正是一个好一点比MSDN文档解释。
我使用的是CrystalDecisions.Windows.Forms.CrystalReportViewer控件来显示报告,我相信这是正确的。
如果我即将踏上一个漫长而复杂的旅程,什么是创建和也可以打印显示的报告最简单的方法?
我已成功地完成这项工作了。
简要概述
它的工作原理由具有“数据类”,这仅仅是包含变量,没有代码一个普通的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,正常的数组访问可以被用来获取他们:
((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对象
- 向下滚动列表,找到您的数据类(如果它不存在,编译应用程序)
- 按“>>”,然后确定
- 现在,您可以在类成员拖到报告,并根据需要安排他们。
水晶是创建报表的一个可能的选项。 它已经存在了很长一段时间,很多人似乎喜欢它。
你可能想看看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 Reporting Services的事,除非你不需要的SQL Server(也asp.net)。 另外,您还对他们完全控制(你如何表现,如何收集数据,他们会产生什么层,你跟他们做的产生,比如他们邮寄,发送给FTP等以后有什么)。 您还可以导出为PDF和Excel。
而在你的情况下建立的数据和用户输入的报告,这可能会工作带来极大的为你走,你可以建立自己的数据源和数据。 一旦你的数据准备好要报告,将其绑定到您的报告。
这些报告可以很容易地建立在Visual Studio 2005中(添加到您的项目报告),并在使用ReportViewer控件WinForms应用程序中显示。
这里是一个伟大的书,我推荐给大家看看,如果有兴趣的客户端报告。 它提供了很多伟大的信息和许多不同的场景和使用客户端的报告方式。
http://www.apress.com/book/view/9781590598542
我第二次亚历克斯的建议,看看SQL报告服务 - 如果你有一个SQL开发人员许可证,那么你可能已经有报告服务
我不喜欢水晶报表,太多沉闷的设计师(编辑表达所有的时间)太多的服务器部署问题(检查这些许可文件!)
我用的水晶。 我会简单介绍一下我的方法,但是要知道,我是一个人的商店,它可能无法转化为您的环境。
首先,创建与CR阅读器的形式。 然后:
1)找出你所需要的数据,并创建检索所需的列视图。 2)使用向导创建给您的视图的数据源的新Crystal报表。 3)拖放,插入,删除和任何粗略报告成的形状。 是的,这是乏味。 4)创造必要的按钮,点击或什么的,并创建一个用于生成报告的功能。 5)数据检索到数据表(可能在一个数据集)。 您不必使用视图。 6)创建报表对象。 将数据表是数据源。 分配报表对象的CR阅读器。 这对于有示例中的一个的一部分。
评论:
如果使用的数据库字段等(字段资源管理器)失去了窗口,去查看/文档大纲。 (这是我幻想有在舞台上比尔·盖茨,让他找到它。)
之所以设立的看法是,如果你想添加一列,您修改视图和字段资源管理器将自动更新。 我已经做其他方面的麻烦种种。 这种方法也是一个变通的,需要通过扫描所有表重置它们指向哪个表的错误。 你想手工水晶一个表。 你不想尝试让水晶连接表,等我不说这是行不通的; 我说这是更难。
有(或曾经),用于对业务的执行VS水晶的文档对象的网站,但我相信,它已经消失在注册/登录屏幕后面。 (我可以站在我自己的详细信息。)
我有麻烦水晶页休息时,我想,而不是分页符的时候,我不想等,这远非我曾经用过的最好的报告作家,我不明白为什么它似乎已经把这么多的人歇业。 此外,他们的许可政策是非常难以对付的小,流体组织。
编辑补充例如:
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/
我强烈建议尝试使用其他报告解决方案 - 我有很多的水晶经验,并已成功地做一些时髦的东西与它在.NET中,但坦白水晶和.Net的集成是什么,但绝对猪最简单的情况。
我曾尝试RS。 我从RS转换回水晶。 RS是太沉重和缓慢(或东西)。 没有任何理由需要等待30秒的报告呈现的RS当水晶做它在一秒之内。