在 VB.net windows 应用程序中使用 Crystal 报告
Using Crystal Reports in VB.net windows app
我已经进行了大量的谷歌搜索并测试了各种代码都无济于事,所以在任何人哭泣之前"DUPLICATE"请通读问题。
场景: 我有一个用 VB.net 编写的 windows 表格,使用 visual studio 2013.我已经安装了 Crystal 报告 API,并且打开了一份随 Sage Business Vision 一起提供的现有报告,并删除了所有字段(基本上将其简化为布局)。我需要从我的通用数据库中的 3 个不同表中提取数据以用于此报告。
我的成就: 到目前为止,我已经创建了一个表单并将其命名为 'RPTviewer' 并且我删除了 Crystal 报告查看器就可以了(并保留默认名称 'CrystalReportViewer1'
斗争: 我很难让报告显示任何内容。我试过使用 SQL 表达式字段,但它们不允许我使用 WHERE 子句。看来我只能在 'SELECT' 和 'FROM' 子句之间指定 SQL 字符串的一部分。
我的解决方法是在 windows 表单中进行所有查询,并将信息注入预定义的字段。我已经尝试使用 'Unbound Field':
Private Sub RPTviewer_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim rpt As New OfficeCopyPS
Dim crOrderNumber As CrystalDecisions.CrystalReports.Engine.TextObject
crOrderNumber = rpt.ReportDefinition.ReportObjects("OrderNumber")
crOrderNumber.Text = "1234567"
CrystalReportViewer1.ReportSource = rpt
CrystalReportViewer1.Refresh()
rpt.Load()
End Sub
然而,在 运行 的时候,我看到的只是一个空白的查看器。我也尝试过使用参数字段,但它只是在 运行 时提示我输入一个值,而忽略了我在 form_load 事件中指定的值(尽管它确实加载了报告)。
rpt.SetParameterValue("OrderNumber", "1234567")
CrystalReportViewer1.ReportSource = rpt
CrystalReportViewer1.Refresh()
rpt.Load()
必须有办法做到这一点。有文档吗?谁能建议一种更好的方法来将我需要的信息获取到报告中?谢谢。
好的,我知道了。我将在这里总结我的发现:参数就是:参数。它们可用于将信息传递给函数和查询数据。在数据库专家下,您可以使用创建命令时定义的一个或多个参数来创建带有 WHERE 子句的命令。
我的大问题是试图在加载报表之前传递参数。以下是正确的顺序:
CrystalReportViewer1.ReportSource = rpt
rpt.Load()
rpt.SetParameterValue("OrderNumber", "1234567") 'use this to pass parameters
rpt.DataDefinition.FormulaFields("FORMULAFEILDNAME").Text = "'" & This appears in formula & "'" 'This inserts into a formula feild.
CrystalReportViewer1.Refresh()
以上是同时传递给参数和公式字段的示例。与参数不同的是,公式字段似乎需要放在报表上才能接收值。顾名思义,公式字段接受公式以及函数、循环、决策结构和变量。请注意,在上面的代码中,我必须将字符串用单引号括起来,这样公式才能显示它。
我已经进行了大量的谷歌搜索并测试了各种代码都无济于事,所以在任何人哭泣之前"DUPLICATE"请通读问题。
场景: 我有一个用 VB.net 编写的 windows 表格,使用 visual studio 2013.我已经安装了 Crystal 报告 API,并且打开了一份随 Sage Business Vision 一起提供的现有报告,并删除了所有字段(基本上将其简化为布局)。我需要从我的通用数据库中的 3 个不同表中提取数据以用于此报告。
我的成就: 到目前为止,我已经创建了一个表单并将其命名为 'RPTviewer' 并且我删除了 Crystal 报告查看器就可以了(并保留默认名称 'CrystalReportViewer1'
斗争: 我很难让报告显示任何内容。我试过使用 SQL 表达式字段,但它们不允许我使用 WHERE 子句。看来我只能在 'SELECT' 和 'FROM' 子句之间指定 SQL 字符串的一部分。
我的解决方法是在 windows 表单中进行所有查询,并将信息注入预定义的字段。我已经尝试使用 'Unbound Field':
Private Sub RPTviewer_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim rpt As New OfficeCopyPS
Dim crOrderNumber As CrystalDecisions.CrystalReports.Engine.TextObject
crOrderNumber = rpt.ReportDefinition.ReportObjects("OrderNumber")
crOrderNumber.Text = "1234567"
CrystalReportViewer1.ReportSource = rpt
CrystalReportViewer1.Refresh()
rpt.Load()
End Sub
然而,在 运行 的时候,我看到的只是一个空白的查看器。我也尝试过使用参数字段,但它只是在 运行 时提示我输入一个值,而忽略了我在 form_load 事件中指定的值(尽管它确实加载了报告)。
rpt.SetParameterValue("OrderNumber", "1234567")
CrystalReportViewer1.ReportSource = rpt
CrystalReportViewer1.Refresh()
rpt.Load()
必须有办法做到这一点。有文档吗?谁能建议一种更好的方法来将我需要的信息获取到报告中?谢谢。
好的,我知道了。我将在这里总结我的发现:参数就是:参数。它们可用于将信息传递给函数和查询数据。在数据库专家下,您可以使用创建命令时定义的一个或多个参数来创建带有 WHERE 子句的命令。
我的大问题是试图在加载报表之前传递参数。以下是正确的顺序:
CrystalReportViewer1.ReportSource = rpt
rpt.Load()
rpt.SetParameterValue("OrderNumber", "1234567") 'use this to pass parameters
rpt.DataDefinition.FormulaFields("FORMULAFEILDNAME").Text = "'" & This appears in formula & "'" 'This inserts into a formula feild.
CrystalReportViewer1.Refresh()
以上是同时传递给参数和公式字段的示例。与参数不同的是,公式字段似乎需要放在报表上才能接收值。顾名思义,公式字段接受公式以及函数、循环、决策结构和变量。请注意,在上面的代码中,我必须将字符串用单引号括起来,这样公式才能显示它。