除非有人有更快/更简单的解决方案,否则这是我在 Visual Studio 2010 中使用 MS Access 获取水晶报表的方法。它比选择数据源的常规方法稍微复杂一些,但它提供了更多控制,与数据库无关,并且可以在其他方法有时失败的情况下工作(尤其是在我的经验中使用 MS Access)。
我将详细介绍使报告从头到尾工作的过程(因为整个过程可能对其他人有用),但会突出显示可能对您有用的部分。
1) 从 SAP 站点安装 Crystal Reports。确保您下载的是 exe 文件,而不是 msi 文件(它不起作用):
http://scn.sap.com/docs/DOC-7824
2) 将应用的目标框架更改为 .Net Framework 4(非客户端)。 Crystal 的东西不包含在基本配置文件中。
3) 添加对 Crystal 库的引用(Crystal Reports for .NET)
4) 添加一个表单,在该表单上放置一个 Crystal Report Viewer 控件(来自工具箱的报告部分):
5) 添加一个 CrystalReportDocument 并将其分配给 CrystalReportViewer 控件:
要使用数据实际填充报告,请执行以下操作:
1) 通过执行获取报告数据表(来自网关)并导出模式的代码来输出报告模式。例如:
<TestMethod()>
Public Sub SchemaTest()
Dim dataSet As DataSet = StaticDataGateway.AccountingIncomeTotals
dataSet.WriteXmlSchema("I:\Myschema.xml")
End Sub
如果您已经创建了报告,则可能不需要它。如果您可以手动编写 xml,则相同(一旦您有模板可以使用就很容易)
2) 然后您将其加载到您的报告中以获取您可以操作的字段以生成您的报告。为此,您可以在报告字段资源管理器中右键单击数据库字段:
3) 从这里选择 Database Expert 并选择 ADO.net (xml)。 Access/Excel DAO 的逻辑选择实际上在 VS 2010 中根本不起作用。选择您的架构文件并加载它,然后双击 Table1 以填充 Selected Tables 视图:
4) 现在您已经加载了一个架构,您将能够在字段下拉列表中看到字段,您可以将其拖放到您的报告中:
5) 最后,您通过在您放置 reportviewer 控件的表单的加载事件中执行代码来将数据集加载到报表中:
i) 确保从网关(或任何地方)输出数据集(不是数据表):
Public Shared Function AccountingIncomeTotals() As DataSet
Dim dataSet As New DataSet
Dim dataTable As DataTable = Database.GetDataTable(GetCommand(DBC.Reporting.SPs.AccountingIncomeTotals))
dataSet.Tables.Add(dataTable)
Return dataSet
End Function
ii) 然后将其分配给报表上的数据源:
Private Sub AccountingIncomeTotals_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
AccountingIncomeTotalsReport1.SetDataSource(StaticDataGateway.AccountingIncomeTotals)
End Sub
上面的部分可能会让您特别感兴趣,因为它允许您直接将数据源分配给报表,而无需使用水晶选择数据
来源 UI 面板。
还有一件事,你需要添加“useLegacyV2RuntimeActivationPolicy”
到 app.config 文件:
http://www.codeproject.com/Questions/390643/Error-When-use-of-crystal-report-sap-crystal-13-an
希望对你有帮助,很抱歉,如果您有任何问题,请询问