3

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

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

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

提前致谢..

4

2 回答 2

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.)
于 2012-07-06T04:07:50.717 回答
2

这对我有用,因为 VS2010 没有可供参考的水晶引擎,所以我使用 Visual Studio 2008。

首先,确保你已经导入了这两个:

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

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

如果对您有用,请标记为已接受

谢谢你

于 2013-07-02T09:38:16.063 回答