Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Pass a parameter from a Windows form to a crystal report in VB.NET

Posted on 2016-09-14
8
79 Views
Last Modified: 2016-09-29
Caution - I need very specific instructions as I am not at all proficient in VB.net or CR.  
I want to enter a strNumber in a textbox on a windows form, and have it passed to a Crystal Report parameter for sorting (CR report is on the same form).

I'm using Visual Studio 2015/VB.net

I created a Windows form named frmSubSpecsReport
I created a Textbox on the form named txtJobNumber and a variable strJobNumber to hold the value that is typed into the textbox
I created a parameter in the report named JobNumber, which I will use to sort through all the jobs to find the correct one
I want to capture the number that a user types into the textbox and pass it to the JobNumber parameter in CR

I've used the Imports at the top of the form:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

I've added this code for the button click event -

        Dim ParameterFields As CrystalDecisions.Shared.ParameterFields
        Dim ParameterField As CrystalDecisions.Shared.ParameterField
        Dim ParameterDiscreteValue As CrystalDecisions.Shared.ParameterDiscreteValue
        Dim strJobNumber As String = txtJobNumber.Text

'assign a report object to the viewer
        Dim crSubSpecsReport As New CrystalReport1    
  I got an error using CrystalReport1 as not being referenced ?? So I added the following to get the error to go away, but really don't know what it does:
Private Class CrystalReport1
    End Class

Then the code continues as follows:
        CrystalReportViewer1.ReportSource = New crSubSpecsReport

        'reference the parameterfields collection
        ParameterFields = CrystalReportViewer1.ParameterFieldInfo

        'reference the ParameterField object (name of the parameter i CR)
        ParameterField = ParameterFields("JobNumber")

        'create a parameterValue object
        ParameterDiscreteValue = New ParameterDiscreteValue

        'assign a default value
        ParameterDiscreteValue.Value = "strJobNumber"

        'add the ParameterValue object to the CurrentValues or DefaultValues collection
        ParameterField.CurrentValues.Add(ParameterDiscreteValue)

When I run the program, the CR parameter input form appears (not what I want) and when I enter a number, it does appear on the report, but if I use the textbox and click the button, then "strJobNumber" appears instead of the number entered.

Thanks very much for taking a look at this!
0
Comment
Question by:Gary Demos
  • 5
  • 3
8 Comments
 

Author Comment

by:Gary Demos
ID: 41798432
I have found another template which works using the ReportDocument class, but it still displays the CR parameter input form first, then after entering a string it moves to the report form where I can enter a string in the textbox, and then click the button and it does display on the report.

My problem now is this - I would like to go directly to the form and bypass the CR parameter dialog.
Here is the code that I changed to:

Private Sub btnViewReport_Click(sender As Object, e As EventArgs) Handles btnViewReport.Click

        Dim crSubSpecsReport As New ReportDocument
        crSubSpecsReport.Load("D:\Visual Studio 2015 Projects\Production Reports\Production Reports\crSubSpecsReport.rpt")
        Dim crParameterFieldDefinitions As ParameterFieldDefinitions
        Dim crParameterFieldDefinition As ParameterFieldDefinition
        Dim crParameterValues As New ParameterValues
        Dim crParameterDiscreteValue As New ParameterDiscreteValue
        crParameterDiscreteValue.Value = txtJobNumber.Text
        crParameterFieldDefinitions = crSubSpecsReport.DataDefinition.ParameterFields
        crParameterFieldDefinition =
            crParameterFieldDefinitions.Item("JobNumber")
        crParameterValues = crParameterFieldDefinition.CurrentValues
        crParameterValues.Clear()
        crParameterValues.Add(crParameterDiscreteValue)
        crParameterFieldDefinition.ApplyCurrentValues(crParameterValues)
        CrystalReportViewer1.ReportSource = crSubSpecsReport
        CrystalReportViewer1.Refresh()


    End Sub
0
 
LVL 100

Expert Comment

by:mlmcc
ID: 41798899
0
 

Author Comment

by:Gary Demos
ID: 41804601
Thanks for the link - I will try it out today!
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:Gary Demos
ID: 41805187
The link above was to a program written in VS 2005 and it would not update to VS2015. I found the code difficult to follow as well since it was using a Dataset and I am using OLE DB connection since I'm connecting to a SQL 2000 DB. I don't know enough to fill in the blanks in coding, and if someone could show me how I need to modify my code above that would be very helpful.

Thanks, Gary
0
 
LVL 100

Expert Comment

by:mlmcc
ID: 41805592
I will look into it but I am not a .Net programmer so I will have similar problems.

mlmcc
0
 

Author Comment

by:Gary Demos
ID: 41812805
Yes the .NET is the part I need help with.
0
 
LVL 100

Accepted Solution

by:
mlmcc earned 500 total points
ID: 41813078
This article from SAP on parameters may help

http://scn.sap.com/docs/DOC-70646

http://scn.sap.com/thread/3942873

mlmcc
0
 

Author Comment

by:Gary Demos
ID: 41816827
Thank you - the first link looks very interesing and informative. I'll dig into it and see how it goes.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

If you're writing a .NET application to connect to an Access .mdb database and use pre-existing queries that require parameters, you've come to the right place! Let's say the pre-existing query(qryCust) in Access takes a Date as a parameter and l…
Hello everyone, Hope you find this as helpful as we did. We have on the company I work for an application built in Delphi V with Crystal Reports 8. We all know that Crystal & Delphi can be temperamental sometimes and the worst thing is, nearly…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

856 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