【发布时间】:2018-02-21 14:16:42
【问题描述】:
我已经做了很多谷歌搜索并测试了各种代码都无济于事,所以在有人喊“重复”之前,请仔细阅读问题。
场景:我有一个使用 Visual Studio 2013 用 VB.net 编写的 windows 窗体。我已经安装了 Crystal Reports API,并打开了 Sage Business Vision 提供的现有报表并删除了所有字段(基本上将其剥离为仅布局)。我需要从我的普遍数据库中的 3 个不同表中提取数据以用于此报告。
我完成了什么: 到目前为止,我已经创建了一个表单并将其命名为“RPTviewer”,并将 Crystal Report Viewer 放在上面(并保留了默认名称“CrystalReportViewer1” '
斗争:我很难让报告显示大部分内容。我试过使用 SQL 表达式字段,但他们不允许我使用 WHERE 子句。看来我只能在 'SELECT' 和 'FROM' 子句之间指定 SQL 字符串的一部分。
我的解决方法是在 Windows 窗体中进行所有查询并将信息注入到预定义的字段中。我已经尝试过使用“未绑定字段”:
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()
必须有办法做到这一点。有文件吗?任何人都可以提出更好的方法来获取我需要的信息到报告中吗?谢谢。
【问题讨论】:
-
您是否在使用连接到报表的数据源显示表中的字段时遇到问题?对于这种事情,我通常使用公式。作为Expressions are pretty limited
-
我只有一天时间玩这个,所以我不知道如何使用公式。但很高兴知道我不应该为表达而烦恼
-
他们有自己的位置,但您的报告运行速度并不慢。我没有使用过它们,但我确实想到了一个例子,这会加快我的报告速度。我只是使用数据集设计器,将其设置为报表的来源,然后您可以根据需要在代码中过滤查询。
-
就在那儿!这就是我需要的!如何过滤查询?这也在公式字段中吗?
标签: vb.net crystal-reports pervasive