2012-07-04 101 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

相關問題