Pik*_*iku 9 .net c# database crystal-reports visual-studio
我需要在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);
}
Run Code Online (Sandbox Code Playgroud)
然后将该类放入 ArrayList 中。数组列表中的每个元素对应于完成的报告中的一个“行”。
列表中的第一个元素还可以保存报表页眉数据,列表中的最后一个元素可以保存报表页脚数据。因为这是一个 ArrayList,所以可以使用普通的数组访问来获取它们:
((CPickingNoteData)rptData[0]).header_date = DateTime.Now;
((CPickingNoteData)rptData[rptData.Count-1]).footer_serial = GenerateSerialNumber();
Run Code Online (Sandbox Code Playgroud)
一旦你有了一个充满数据的数组列表,将其绑定到你的报表查看器,如下所示,其中“rptData”的类型为“ArrayList”
ReportDocument reportDoc = new ReportDocument();
reportDoc.Load(reportPath);
reportDoc.SetDataSource(rptData);
crystalReportViewer.ReportSource = reportDoc;
Run Code Online (Sandbox Code Playgroud)
现在您需要将数据类绑定到报表本身。您可以在设计器内部执行此操作:
| 归档时间: |
|
| 查看次数: |
46685 次 |
| 最近记录: |