2017-04-06 166 views
0

我目前使用水晶报表XI和VB studio 2005.我正面临着通过winform将参数传递给报表的问题。下面是我的代码:Crystal Reports:通过winform传递参数VB.Net

在我的报告形式,其中晶体控制所在:

Public Sub DisplayReport(ByVal formTitle As String) 
Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo() 
myConnectionInfo.UserID = "" 
myConnectionInfo.Password = "" 

SetDBLogonForReport(myConnectionInfo, rptDoc) 

Me.Text = formTitle 

CrystalReportViewer1.ReportSource = rptDoc 
CrystalReportViewer1.RefreshReport() 
End Sub 

Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument) 
    Dim myTables As Tables = myReportDocument.Database.Tables 
    For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables 
     Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo 
     myTableLogonInfo.ConnectionInfo = myConnectionInfo 
     myTable.ApplyLogOnInfo(myTableLogonInfo) 
    Next 
End Sub 

在我打印报表,我所说的报表:

Private Sub ConfigureCrystalReport(ByVal btnPrint As Boolean) 
    Dim myRptView As New frmReportView 
    Dim rptFile As String = "" 
    Dim strSelFormula As String = "" 

    'getting report path dynamically 
    Dim rptPath1 As New getAppDBSettingsBLL 
    rptPath1 = New getAppDBSettingsBLL 
    Dim rptPath As String = rptPath1.getReportPath(4) 
    rptFile = rptPath & "\" & "XXX.rpt" 

    myRptView = New frmReportView 
    rptDoc.Load(rptFile) 


    myRptView.DisplayReport(Me.Text) 

    rptDoc.SetParameterValue("@dateA", Format(Me.DateTimePicker1.Value.Date, "mm/dd/yyyy")) 

    myRptView.Show() 

    myRptView.CrystalReportViewer1.Dock = DockStyle.Fill 
    myRptView.WindowState = FormWindowState.Maximized 

End Sub 

我从拉数据一个基于参数的连接SQL语句,将在报表中使用。 SQL语句是正确的,并且传递的值是正确的。但参数提示框不断出现,我想压制它。在提示框中输入参数时,报告显示正确。这里有什么问题?

回答

0

这种类型的参数"@dateA"的是Stored Procedure

和这种类型的参数"dateA"的是从Crystal Parameter正常自称

0

首先,如果你正在做一个CR参数,该参数应该启动“?”,而不是“@”。

二,参数框保持雨后春笋般冒出来,你所能做的就是在你的水晶报表查看器形式的页面加载,粘贴:

Dim param1Fields As New ParameterFields 
Dim param1Field As New ParameterField 
Dim param1Range As New ParameterDiscreteValue 

param1Field.ParameterFieldName = "Write your parameter name" 
param1Range.Value = <provide your parameter value> 
param1Field.CurrentValues.Add(param1Range) 
param1Fields.Add(param1Field) 
CrystalReportViewer1.ParameterFieldInfo = param1Fields