我创建了一个水晶报告(交叉表)。我没有使用任何数据集,而是使用水晶报表中的向导从我的数据库模式调用过程 (提供者是oracle的Microsoft OLEDB提供者,之后我提供了我的数据库凭据(即模式,用户名,密码)并选择了该过程并选择了我想在报告中显示的列。
我需要从前端传递5个参数来生成报告。在查看水晶报告预览时,通过提供参数,报告可以正常工作。
现在我想从前端(vb.net)传递这5个参数,以在CrystalReportViewer中显示报告。请建议使用aspx.vb文件编写代码。 (PS: - 我确实通过其他论坛发现了一些代码,但是所有代码都给出了一些或其他错误,所以我发布了一个,以便我可以获得特定于我的要求的代码。)
提前致谢..
答案 0 :(得分:5)
我已经让报告工作了...... 我写了下面的代码:
Dim RptDocument As New ReportDocument
RptDocument.Load(Server.MapPath("rpt\Report.rpt"))
RptDocument.SetParameterValue("param1", Session("param1"))
RptDocument.SetParameterValue("param2", ddlparam2.SelectedValue)
RptDocument.SetParameterValue("param3", param3.text)
RptDocument.SetParameterValue("param4", param4.text)
RptDocument.SetParameterValue("param5", param5.text)
'Set login info
Dim myLogin As CrystalDecisions.Shared.TableLogOnInfo
Dim myTable As Table
For Each myTable In RptDocument.Database.Tables
myLogin = myTable.LogOnInfo
myLogin.ConnectionInfo.ServerName = "server name"
myLogin.ConnectionInfo.DatabaseName = ""
myLogin.ConnectionInfo.UserID = "userid"
myLogin.ConnectionInfo.Password = "pwd"
myTable.ApplyLogOnInfo(myLogin)
myTable.Location = myTable.Location
CrystalReportViewer1.ReportSource = RptDocument
创建了一个系统DNS,并且必须将Oracle.DataAccess.dll
添加到引用和类文件(其功能与connectooracle.vb类文件中的功能相同但名称不同),还要在global.asax中设置连接引用该类连接并使用
Imports Oracle.DataAccess.Client
代替Imports System.Data.OracleClient
(以避免含糊不清)......
这以某种方式使它工作,可能还有其他一些解决方案.. :)
(For ref:- Adding myLogin.ConnectionInfo.IntegratedSecurity = True gave me this error--
Logon failed. Error in File C:\DOCUME~1\Username\LOCALS~1\Temp\Report {1AG3DD86-141D-43YA-B6A2-AEDF3459AE49}.rpt: Unable to connect: incorrect log on parameters.)
答案 1 :(得分:1)
这对我有用,我使用的是Visual Studio 2008,因为VS2010没有晶体引擎供参考。
首先,确保您已导入这两个:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
现在,就我而言,我使用的是 odbc 因为正如我所注意到的那样,水晶报告可以正常使用,因为我们正在使用odbc。所以我没有在我的代码中包含报告的登录属性。在报告中只选择odbc连接。
Private Sub ReportViewer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim cryRpt As New ReportDocument
Dim str1 As String
Try
str1 = Title.str1
str2 =Title.str2
cryRpt.Load("c:\Program Files\Report\" & str2 & "")
Dim crParameterFieldDefinitions As ParameterFieldDefinitions
Dim crParameterFieldDefinition As ParameterFieldDefinition
Dim crParameterValues As New ParameterValues
Dim crParameterDiscreteValue As New ParameterDiscreteValue
crParameterDiscreteValue.Value = strStore
crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields
crParameterFieldDefinition = crParameterFieldDefinitions.Item("Store")
crParameterValues = crParameterFieldDefinition.CurrentValues
crParameterValues.Clear()
crParameterValues.Add(crParameterDiscreteValue)
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues)
rptviewer.Cursor = Cursors.AppStarting
rptviewer.ReportSource = cryRpt
rptviewer.Refresh()
rptviewer.Cursor = Cursors.Default
Catch ex As Exception
MsgBox(ex.Message)
Me.Close()
ReportInterface.Show()
End Try
End Sub
我有一个类可以获取用户输入的数据。但是这不能使用存储过程参数。
如果适合您,请标记为已接受
谢谢