2012-07-04 67 views
1

我已经创建了一个水晶报表(交叉表)。我没有使用任何数据集,而是使用水晶报表中的向导从我的数据库模式中调用过程 (Provider给出的是用于Oracle的Microsoft OLEDB提供程序,之后,我给出了我的数据库凭证(即模式,用户名,密码)并选择了程序并选择了我想在报告中显示的列)。如何将参数传递给vb.net代码中的水晶报表

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

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

在此先感谢..

+0

请参考下面的参考线:> [提示:如何通过水晶报表参数编程? ](http://www.c-sharpcorner.com/UploadFile/mahesh/paramInCR11012006132839PM/paramInCR.aspx) 或> [如何将离散参数传递给Crystal Reports](http://www.codeproject.com/Articles/ 9263/How-to-pass-discrete-parameters-to-Crystal-Reports) – hims056

+0

我尝试过在第一个链接中写入的内容,但是它们声明了一个数据集并将报告的数据源设置为数据集,但没有我可以在哪里看到他们填充数据集.. 也没有使用任何数据集,但调用程序,同时使用oledb提供程序进行水晶报告(.rpt).... – Gunner

+0

我编辑了我的问题... – Gunner

回答

3

我得到的报告工作... 我写了下面的代码:

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.) 
+0

上面给出的代码也是正确的。 – Gunner

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 

我有一个类将获得用户输入的数据。但是这不会使用存储过程参数。

请注明所接受,如果你的作品

谢谢

+0

哎呀..我以为这是不久前,因为它的七月大声笑。我没有看到一年可能不好。无论如何。 – Androidz

相关问题