Skip to Content
avatar image
Former Member

Passing parameters to a report from a program

I am using Crystal Reports with Visual Studio 2017. I have written a few reports and all work well in Crystal. However I need to have the parameters validated before printing and to do this I have written a program in C#. I use a button click event to fire the report and my code is as follows:


private void btnPrint_Click(object sender, RoutedEventArgs e)
{
string reportPath = @"C:\qpaq\reports\LedegerTransactionReport.rpt";
CRLedgerTransactionReport ledgerTransactionReport = new CRLedgerTransactionReport();

ledgerTransactionReport.SetParameterValue("Start Account Number", fromAccNumber);
ledgerTransactionReport.SetParameterValue("End Account Number", toAccNumber);
ledgerTransactionReport.SetParameterValue("Start Date", fromDate);
ledgerTransactionReport.SetParameterValue("End Date", toDate);


ledgerTransactionReport.Load(reportPath);


CrystalReportsViewer crystalReportsViewer = new CrystalReportsViewer();
[crystalReportsViewer.ViewerCore.ReportSource = ledgerTransactionReport;
}


1. When I run the program I get the Crystal "Enter Parameter Values" window appear but the parameters are not populated
2. When I do a trace on the code,I can see the values entered but a trace on the last line,.ReportSource, HasRecords says
" HasRecords threw an exception of type 'CrystalDecision.CrystalReports.Engine.ParameterField(CurrentValueException"
3. I cant understand why the parameters are not being passed, not sure if there is a problem with my code.
4. The parameters above are exactly as created in the Crystal report

I would like to be able run the report from the program and not have Crystal's "Enter Parameter Values" window displayed

Your assistance is most appreciated. I thank you,
Bhuven

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

9 Answers

  • Best Answer
    Jan 23 at 10:43 PM

    mmmmm. It works for me:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using SAPBusinessObjects.WPF.Viewer;

    namespace WpfApplication1
    {
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();
    }

    private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
    {
    var reportDocument = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
    var reportPath = @"D:\Atest\411050\report1.rpt";

    reportDocument.Load(reportPath, CrystalDecisions.Shared.OpenReportMethod.OpenReportByTempCopy);
    reportDocument.SetParameterValue("End Account Number", "1");

    this.MainReportViewer.ViewerCore.ReportSource = reportDocument;
    }

    private void MainReportViewer_OnSelectionChange(object sender, RoutedEventArgs e)
    {
    //this.MainReportViewer.ViewerCore.
    }

    private void MainReportViewer_OnDoubleClickPage(object sender, PageMouseEventArgs e)
    {
    //throw new NotImplementedException();
    }
    }
    }

    The only reason I can think it's prompting is because there is another parameter that needs to be updated.

    Possibly the report is going out of scope, try adding some logging and try/catch to see what is happening in code.

    Don

    Add comment
    10|10000 characters needed characters exceeded

  • Jan 15 at 09:44 PM

    You need to load the report before setting parameter values

    Don

    Add comment
    10|10000 characters needed characters exceeded

  • Jan 16 at 06:56 PM

    Ah, you are using the WPF viewer, is that what you wanted to use?

    Don

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jan 16 at 07:56 AM

    Thank you Don, much appreciated, will try

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jan 16 at 09:37 AM

    Hi Don

    I made the change as follows:

    private void btnPrint_Click(object sender, RoutedEventArgs e)
    {
    string reportPath = @"C:\qpaq\reports\LedegerTransactionReport.rpt";

    CRLedgerTransactionReport ledgerTransactionReport = new CRLedgerTransactionReport();
    ledgerTransactionReport.Load(reportPath);

    ledgerTransactionReport.SetParameterValue("Start Account Number", fromAccNumber);
    ledgerTransactionReport.SetParameterValue("End Account Number", toAccNumber);
    ledgerTransactionReport.SetParameterValue("Start Date", fromDate);
    ledgerTransactionReport.SetParameterValue("End Date", toDate);

    CrystalReportsViewer crystalReportsViewer = new CrystalReportsViewer();
    crystalReportsViewer.ViewerCore.ReportSource = ledgerTransactionReport;
    }

    when i run the report I get the following:

    1. I did a trace and no errors detected.

    2. I moved the viewer code above setparameter code, I get the same result

    3. If I move the load back to below the setparameters, I get to Crystals "Entere Parameter..." window

    4. I checked the path statement and moved the report as well, same error

    5. Cannot get to where refernces are not set to the report

    Is there anything else I can try please

    Many thanks

    Bhuven

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jan 16 at 09:45 AM

    crerror.png

    Hi Don

    Here is the error m,essage, I did not upload above

    thanks bhuven

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jan 17 at 04:01 AM

    Yes I want to use the WPF Viewer. I have created the reports within Visual Studio.

    For reports without parameters, I created a windows and added the viewer to the window and called the report

    For these reports, I just instantiated the viewer without adding a viewer to a window.

    CrystalReportsViewer crystalReportsViewer = new CrystalReportsViewer();
    crystalReportsViewer.ViewerCore.ReportSource = ledgerTransactionReport;

    Is this correct?

    Many thanks

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jan 23 at 05:23 AM

    HI All,

    I have been trying unsucessfully to resolve this error for the past week that I get when trying to pass parameters from my C# program to Crystal reports using C# WPF viewer. I tried it also with a report that does not have parameters and the same error occurs.. My code is above

    Does anyone know where I can get access to a complete program listing just to compare idf I am missing anything in my code. I have been searching on the internet for a few days for some guidance, but cannot find anything that is complete

    My reports work well if I run them directly in the viewer however, I need to validate certain parameters before printing hence the need to pass the parameters via code

    Any assistance will be most appreciated, Many thanks

    Bhuven

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jan 24 at 04:27 AM

    Hi Don

    I resolved the proble, somewhere in my code i had instantiaited the viewer twice, the parameter were being passed to the second viewer.

    Been looking at that code for two weeks before seeing the problem

    Many thanks

    Regards, bhuven

    Add comment
    10|10000 characters needed characters exceeded