Solved

Crystal Reports - Enter parameter values window appears

Posted on 2008-06-10
7
550 Views
Last Modified: 2013-11-26
Hello experts,

I am learning to program in Visual Basic 2005 for Crystal Reports.  I am following the Walkthroughs included with Visual Studio 2005. I doing the chapterfor "Setting parameters for a report."  When the report opens inside the Form in the CrystalReportViewer control everything works just fine.  But when I try to refresh the report I get the [Enter Parameter Values] window, even though the parameters are already being provided.  Any help will be greatly appreciated.  Thank you.
Imports CrystalDecisions.CrystalReports.Engine

Imports CrystalDecisions.Shared

Imports System.Collections
 

Public Class Form2

    Private Const PARAMETER_FIELD_NAME As String = "City"
 

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ConfigureCrystalReports()

    End Sub

    Private Sub ConfigureCrystalReports()

        Dim myArrayList As ArrayList = New ArrayList()

        myArrayList.Add("Paris")

        myArrayList.Add("Tokyo")
 

        Dim reportPath As String = Application.StartupPath & "\CustomersByCity.rpt"

        myCrystalReportViewer.ReportSource = reportPath
 

        Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo

        SetCurrentValuesForParameterField(myParameterFields, myArrayList)

        defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields)
 

    End Sub

    Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo)

        Dim myTableLogOnInfos As TableLogOnInfos = myCrystalReportViewer.LogOnInfo
 

        For Each myTableLogOnInfo As TableLogOnInfo In myTableLogOnInfos

            myTableLogOnInfo.ConnectionInfo = myConnectionInfo

        Next

    End Sub

    Private Sub SetCurrentValuesForParameterField(ByVal myParameterFields As ParameterFields, ByVal myArrayList As ArrayList)

        Dim currentParameterValues As ParameterValues = New ParameterValues()

        For Each submittedValue As Object In myArrayList

            Dim myParameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
 

            myParameterDiscreteValue.Value = submittedValue.ToString()

            currentParameterValues.Add(myParameterDiscreteValue)

        Next
 

        Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)

        myParameterField.CurrentValues = currentParameterValues

    End Sub

    Private Function GetDefaultValuesFromParameterField(ByVal myParameterFields As ParameterFields) As ArrayList

        Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)

        Dim defaultParameterValues As ParameterValues = myParameterField.DefaultValues

        Dim myArrayList As ArrayList = New ArrayList()
 

        For Each myParameterValue As ParameterValue In defaultParameterValues

            If (Not myParameterValue.IsRange) Then

                Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue, ParameterDiscreteValue)
 

                myArrayList.Add(myParameterDiscreteValue.Value.ToString())

            End If

        Next

        Return myArrayList

    End Function
 

    Private Sub redisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles redisplay.Click

        Dim myArrayList As ArrayList = New ArrayList()
 

        For Each item As String In defaultParameterValuesList.SelectedItems

            myArrayList.Add(item)

        Next
 

        Dim reportPath As String = Application.StartupPath & "\CustomersByCity.rpt"

        myCrystalReportViewer.ReportSource = reportPath
 

        Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo

        SetCurrentValuesForParameterField(myParameterFields, myArrayList)

        defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields)

    End Sub

End Class

Open in new window

0
Comment
Question by:fcoit
  • 3
  • 2
7 Comments
 
LVL 7

Accepted Solution

by:
Dauhee earned 500 total points
ID: 21758215
You need to do it in the following format:
ReportDocument.SetParameterValue(name, value)

Also SetCurrentValuesForParameterField passes parameters byval - should change this to byref
0
 

Author Comment

by:fcoit
ID: 21761153
Dauhee,
I tried it in the redisplay event, but I do not see the SetParameter option for the ReportDocument statement.  Which library do I need to import?  Where do I enter the ReportDocument.SetParameterValue(name, value) statement? Can you please give me an example.  Thank you for your time.

0
 
LVL 7

Assisted Solution

by:Dauhee
Dauhee earned 500 total points
ID: 21768031
Hi fcoit,

the library is:

crystaldecisions.crystalreports.engine.reportdocument

You would use it the same as the crystal report viewer such as

dim objReport as reportdocument (instead of reportviewer)
0
 
LVL 7

Expert Comment

by:Dauhee
ID: 21840399
Hi fcoit did you not try crystaldecisions.crystalreports.engine.reportdocument ?
0
 

Author Comment

by:fcoit
ID: 21875973
For the record this is a problem with Crystal Report 10 for Visual Basic, which has not been resolved by CR.  Specially with Windows Vista I have not tested it in XP though.  
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

IP addresses can be stored in a database in any of several ways.  These ways may vary based on the volume of the data.  I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.   …
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now