如何从vb.net代码传递参数到crystal报表

时间:2012-07-04 05:09:10

标签: vb.net crystal-reports

我创建了一个水晶报告(交叉表)。我没有使用任何数据集,而是使用水晶报表中的向导从我的数据库模式调用过程 (提供者是oracle的Microsoft OLEDB提供者,之后我提供了我的数据库凭据(即模式,用户名,密码)并选择了该过程并选择了我想在报告中显示的列。

我需要从前端传递5个参数来生成报告。在查看水晶报告预览时,通过提供参数,报告可以正常工作。

现在我想从前端(vb.net)传递这5个参数,以在CrystalReportViewer中显示报告。请建议使用aspx.vb文件编写代码。 (PS: - 我确实通过其他论坛发现了一些代码,但是所有代码都给出了一些或其他错误,所以我发布了一个,以便我可以获得特定于我的要求的代码。)

提前致谢..

2 个答案:

答案 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

我有一个类可以获取用户输入的数据。但是这不能使用存储过程参数。

如果适合您,请标记为已接受

谢谢